@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 C:\ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs:line 30 \ r \ n中位于.lambda_method的.BackOffice.Web.Controllers.OrderController..ctor()在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType)处闭包)\\ r \ n 文化=中性,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。“,” ExceptionType“:” System.IO.FileNotFoundException“,” StackTrace“:”在Company.Project.Service.CompanyIntegrationApiService..ctor(Uri baseAddress)\ r \ n在Company.Project C:\ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs:line 30 \ r \ n中位于.lambda_method的.BackOffice.Web.Controllers.OrderController..ctor()在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType)处闭包)\\ r \ n 文化=中性,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。“,” ExceptionType“:” System.IO.FileNotFoundException“,” StackTrace“:”在Company.Project.Service.CompanyIntegrationApiService..ctor(Uri baseAddress)\ r \ n在Company.Project C:\ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs:line 30 \ r \ n中位于.lambda_method的.BackOffice.Web.Controllers.OrderController..ctor()在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType)处闭包)\\ r \ n
当我开始查看程序集时,我可以看到我的Web项目和服务项目针对的是不同版本 System.Net.Http
。
网络项目:
服务项目:
容易想到这是由版本不匹配引起的,但是这里的关键是要查看错误 The system cannot find the file specified.
。
查看path属性,我们可以看到Web项目以.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/issues/22781