Не удалось загрузить файл или сборку 'Microsoft.Management.Infrastructure - PullRequest
0 голосов
/ 27 апреля 2020

Я пишу мультиплатформенное приложение командной строки c# с использованием. NET Core 3.1, которое должно работать как один исполняемый файл. Я использую Visual Studio 2019 (16.5.4). Моя ОС - Windows 10.0.18363.778, и я намеренно НЕ установил Powershell 7. Я тестировал этот первый бит на своих Windows и WSL Ubuntu, и он работал, пока я не добавил Powershell SDK 7. После того, как я установил Microsoft.Powershell.SDK 7.0 .0 и когда Ì установите файл проекта следующим образом, все работает хорошо, и я могу проверить, что я использую PS7, а не Windows PS.

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

Однако, когда я добавляю runtimeIdentifier в PropertyGroup:

    <RuntimeIdentifier>win-x64</RuntimeIdentifier>    

Сборка успешно завершена без ошибок. Однако, когда я запускаю (как отладочную, так и автономную) и приложение обращается к Powershell.Invoke, оно выдает исключение FileNotFound с сообщением:

«Не удалось загрузить файл или сборку» Microsoft.Management.Infrastructure, Version = 1.0.0.0 , Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 '. Системе не удается найти указанный файл. "

1) Чего не хватает, чтобы получить все зависимости в исполняемом каталоге?

2) Когда я добавьте следующее, чтобы создать один исполняемый файл

    <PublishSingleFile>true</PublishSingleFile>
    <UseAppHost>true</UseAppHost>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>     

Он не создается. Я получаю исполняемый файл, если использую: «do tnet publi sh -r win-x64 - c Debug», но ничего не происходит, когда я запускаю его. (Этот шаг работал нормально до PS7) Есть ли еще что-нибудь, что мне нужно сделать, чтобы запустить один исполняемый файл?

1 Ответ

0 голосов
/ 29 апреля 2020

Я провел небольшое исследование и выяснил следующее: Ответ 1. В каталоге времени выполнения нет файлов идентификатора среды выполнения, указанных c Microsoft.Management.Infrastructure.dll. Либо Powershell SDK не поддерживает все идентификаторы времени выполнения, либо это ошибка. Я возьму его на github.

Ответ 2: Запуск одного исполняемого файла вводит в заблуждение. Моим ожидаемым результатом было создание файла журнала, который создается в каталоге приложения. Я подумал, что при запуске одного exe-файла он фактически разархивирует ВСЕ файлы во временный каталог и запускает приложение оттуда (не один исполняемый файл), и, следовательно, файл журнала не создается там, где находится исполняемый файл с одним файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...