@AndreiU 已经给出的答案以及如何在本地重现运行时错误的补充。
部署到 Azure 时出现以下运行时错误,而不是本地。
无法加载文件或程序集 'System.Net.Http, Version=4.2.0.0, Culture=neutral, 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:line 30\r\n at lambda_method(关闭)\r\n 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型控制器类型)"}} 或其依赖项之一。系统找不到指定的文件。","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:line 30\r\n at lambda_method(关闭)\r\n 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型控制器类型)"}} 或其依赖项之一。系统找不到指定的文件。","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:line 30\r\n at lambda_method(关闭)\r\n 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型控制器类型)"}}
当我开始查看程序集时,我可以看到我的 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>
</Reference>
如果您使用像 Jenkins、TeamCity 或 AppVeyor 这样的构建服务器,那么缺少的运行时.dll
也可能存在。.dll
在这种情况下,使用 System.Net.Http 的 NuGet 版本或在本地删除缺失的内容可能无济于事。要解决此错误,请查看未找到的版本和具体的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