ASP.NET Core 2.0 Не удалось загрузить файл или сборку System.ServiceModel

Я работаю над переносом "основного веб-приложения ASP.NET", который компилируется в .NET Framework 4.6.1 (т.е. полная инфраструктура) для компиляции на .NET Core 2.0. У меня есть некоторые зависимости, которые по-прежнему требуют полной структуры, но с .NET 2.0 я понимаю, что теперь я могу ссылаться на полные сборки сборок из компилируемого приложения .NET Core 2.0.

Когда я пытаюсь запустить проект, я получаю следующую ошибку:

Не удалось загрузить файл или сборку 'System.ServiceModel, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'. Система не может найти указанный файл.

Я просмотрел все пакеты NuGet и проекты, на которые я ссылаюсь, и ни один из них не ссылается на System.ServiceModel.Web, но я не уверен, что это так же, как System.ServiceModel. Когда я открываю файл projectname.deps.json, расположенный в папке bin, я вижу ссылку на System.ServiceModel.Web, но не ссылается на System.ServiceModel в разделе "Microsoft.NETCore.App/2.0.0", который содержит следующая строка: "ref/netcoreapp2.0/System.ServiceModel.Web.dll": {},

Я также ткнул в папку "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0", и я вижу файл System.ServiceModel.Web.dll.

Я не выполняю работу WCF, и, как я уже сказал, я просмотрел все зависимости библиотек, которые я использую, и ни один из них не ссылается на System.ServiceModel.

Кто-нибудь еще сталкивается с этой проблемой? Я ценю любые и все идеи, которые могут быть у всех.

Ответ 1

Я решил эту проблему, установив пакет Nuget:

Install-Package Microsoft.Windows.Compatibility

Я использовал ASP.net Core 2.2, но, возможно, работает и для 2.0v

Ответ 2

В Asp.Net Core, когда поставщик связанных веб-служб Microsoft WCF используется в подключенных службах, генератор кода автоматически включает System.ServiceModel.Duplex, System.ServiceModel.Http, System.ServiceModel.NetTcp, System.ServiceModel.Security'assemblies.,

<PackageReference Include="System.ServiceModel.Duplex" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.Http" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.Security" Version="4.4.*" /> 

В вашем случае System.ServiceModel.Primitives необходимо добавить также. Сборка System.ServiceModel.Primitives включает в себя System.ServiceModel.dll

System.ServiceModel, версия = 4.0.0.0 больше не используется.

см. также: https://github.com/dotnet/standard/issues/575#issuecomment-380479584.