Доповнення до відповіді @AndreiU вже дало та як локально відтворювати помилки виконання.
Я отримав помилку виконання нижче під час розгортання в Azure, а не локально.
Не вдалося завантажити файл або збірку "System.Net.Http, Версія = 4.2.0.0, Культура = нейтральна, PublicKeyToken = b03f5f7f11d50a3a" або одна з її залежностей. Система не може знайти вказаний файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n у Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в С: \ проекти \ компанія-проект \ src \ Company.Project.BackOffice.Web \ Контролери \ Замовлення \ OrderController.cs: рядок 30 \ r \ n на lambda_method ( Закриття) \ r \ n у System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Культура = нейтральна, PublicKeyToken = b03f5f7f11d50a3a 'або одна з її залежностей. Система не може знайти вказаний файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n у Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в С: \ проекти \ компанія-проект \ src \ Company.Project.BackOffice.Web \ Контролери \ Замовлення \ OrderController.cs: рядок 30 \ r \ n на lambda_method ( Закриття) \ r \ n у System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Культура = нейтральна, PublicKeyToken = b03f5f7f11d50a3a 'або одна з її залежностей. Система не може знайти вказаний файл. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" в Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n у Company.Project .BackOffice.Web.Controllers.OrderController..ctor () в С: \ проекти \ компанія-проект \ src \ Company.Project.BackOffice.Web \ Контролери \ Замовлення \ OrderController.cs: рядок 30 \ r \ n на lambda_method ( Закриття) \ r \ n у System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}}
Коли я почав переглядати збірки, то побачив, що мій веб-проект та сервісний проект орієнтовані на різні версії для System.Net.Http
.
Веб-проект:
Проект обслуговування:
Неважко подумати, що це викликано невідповідністю версій, але головне тут - подивитися на помилку The system cannot find the file specified.
.
Переглядаючи властивість шляху, ми можемо побачити, що веб-проект орієнтований на збірку .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 або AppVeyor, то .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/isissue/22781