Дополнение к ответу, который уже дал @AndreiU, и о том, как локально воспроизводить ошибки времени выполнения.
При развертывании в Azure, а не локально, я получил указанную ниже ошибку времени выполнения.
Не удалось загрузить файл или сборку System.Net.Http, Version = 4.2.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одну из их зависимостей. Система не может найти указанный файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n в Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: строка 30 \ r \ n в lambda_method ( Закрытие) \ r \ n в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (запрос HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, тип controllerType) "}} Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a 'или одна из его зависимостей. Система не может найти указанный файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n в Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: строка 30 \ r \ n в lambda_method ( Закрытие) \ r \ n в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (запрос HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, тип controllerType) "}} Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a 'или одна из его зависимостей. Система не может найти указанный файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n в Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: строка 30 \ r \ n в lambda_method ( Закрытие) \ r \ n в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (запрос HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, тип controllerType) "}}
Когда я начал рассматривать сборки, я увидел, что мой веб-проект и проект службы ориентированы на разные версии для System.Net.Http
.
Веб-проект:
Сервисный проект:
Легко подумать, что это вызвано несоответствием версий, но главное здесь - посмотреть на ошибку The system cannot find the file specified.
.
Глядя на свойство path, мы видим, что веб-проект нацелен на сборку .Net Framework, а служба нацелена на сборку из Visual Studio 2017. Поскольку на сервере не установлена Visual Studio 2017, произойдет ошибка времени выполнения.
Веб-путь:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Путь обслуживания:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
Что - то же просто , как установка , Copy Local
чтобы true
можно решить эту проблему, однако не во всех случаях.
Чтобы воспроизвести ошибку на вашем локальном компьютере, просто удалите необходимый System.Net.Http.dll
из папки Visual Studio. Это даст вам ошибку времени выполнения и, возможно, некоторые ошибки сборки. После того, как они будут исправлены, все должно работать, по крайней мере, для меня.
Если вы установили System.Net.Http
через, NuGet
проверьте, какая сборка используется, посмотрев на .csproj
версию. System.Net.Http 4.3.4
дает, например, следующую сборку:
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
Если вы используете сервер сборки, такой как Jenkins, TeamCity или AppVey, либо отсутствующая среда выполнения также .dll
может существовать там. В этом случае может не помочь использование NuGet-версии System.Net.Http или .dll
локальное удаление отсутствующих . Чтобы решить эту ошибку, посмотрите версию, которая не найдена, и конкретную PublicKeyToken
. После этого создайте перенаправление привязки в любом Web.config
или в App.config
зависимости от вашего проекта. В моем случае я бы хотел использовать 4.0.0.0:
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
Хорошая ветка Github об этой проблеме:
https://github.com/dotnet/corefx/issues/22781