Опубликованное приложение .NET Core завершается с ошибкой FileNotFoundException - PullRequest
0 голосов
/ 22 ноября 2018

У меня консольное приложение .NET Core с целевым netcoreapp2.1.Он вызывает существующую службу WCF с помощью пакета обеспечения совместимости Windows.

Когда я запускаю его через Visual Studio или использую dotnet run для запуска из командной строки, он отлично работает.

Однако я хочу опубликовать его в файле .exe, чтобы я мог запустить его, дважды щелкнув по нему.

Итак, я запустил публикацию, которая, похоже, удалась, но когда я попытался запуститьВ опубликованном .exe файле происходит сбой со следующим исключением:

System.IO.FileNotFoundException: Could not load file or assembly 
'System.Private.ServiceModel, Version=4.1.2.1, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

Эта ошибка возникает на компьютере, на котором я запустил публикацию, а также при попытке скопировать опубликованную папку на другой компьютер.Я считаю, что System.Private.ServiceModel - это какая-то глубокая зависимость пакета Microsoft.Windows.Compatibility, но почему это не работает?Конечно, он должен был быть скопирован в выходную папку автоматически?

Требуется ли дополнительная настройка или настройка, чтобы публикация автоматически получала зависимости?

Если это имеет значение, ссылка в csprojфайл выглядит так:

  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="2.0.1" />
  </ItemGroup>

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Добавить в пакет vsstudio nuget Install-Package System.Private.ServiceModel

Теперь при публикации dll будет включен.

0 голосов
/ 24 июля 2019

Глядя на связанные проблемы GitHub *, люди, похоже, имеют разный пробег с предлагаемыми обходными путями.

Что мне помогло, так это скопировать DLL из папки времени выполнения, в папку bin, после сборки, добавивэто к моему приложению Azure Function csproj:

<!-- https://github.com/dotnet/wcf/issues/2824 -->
<Target Name="FixForDotnetWcfIssueBuild" BeforeTargets="PostBuildEvent">
  <Copy SourceFiles="$(OutputPath)bin\runtimes\win\lib\netstandard2.0\System.Private.ServiceModel.dll" DestinationFolder="$(OutputPath)bin" />
</Target>
<Target Name="FixForDotnetWcfIssuePublish" AfterTargets="AfterPublish">
  <Copy SourceFiles="$(PublishDir)bin\runtimes\win\lib\netstandard2.0\System.Private.ServiceModel.dll" DestinationFolder="$(PublishDir)bin" />
</Target>

Другие обходные пути включают в себя установку пакета System.Private.ServiceModel напрямую или увеличение версии System.ServiceModel до 4.5.3, но ни один из них не работал для меня.

*

https://github.com/dotnet/wcf/issues/2824

https://github.com/Azure/azure-functions-host/issues/4304

https://github.com/Azure/azure-functions-host/issues/3568#issuecomment-433146109

https://github.com/dotnet/wcf/issues/2349

0 голосов
/ 22 ноября 2018

У меня была та же проблема, и я вручную добавил из nuget отсутствующий файл, установив пакет System.Private.ServiceModel.

Ссылка на nuget.org .

Это, однако, хак, потому что из описания пакета видно, что он предназначен для внутреннего использования .Net, но я не нашел других вариантов.

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