繁体   English   中英

从vs2013升级到vs2017后无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0'

[英]Could not load file or assembly 'System.Web.Http, Version=4.0.0.0' after upgrading from vs2013 to vs2017

我们最近从Visual Studio Community 2013升级到Community2017。我的REST Service项目在启动(构建过程)后开始中断。 这仅发生在3台机器中的1台上。 我们正在使用Microsoft.AspNet.WebApi.Owin创建REST端点。

问题似乎与加载System.Web.Http有关,该库引用到{solution_folder} /packages/Microsoft.AspNet.WebApi.Core.5.2.3/lib/net45/System.Web.Http.dll。

引用的dll位于引用的文件夹中,并且在重建时也复制到bin文件夹中。 有趣的是,当我使用VS2013重建项目时,可以从vs2013或vs2017手动启动服务,但是当我使用vs2017重建项目并启动它时,会出现以下错误:

内部异常1:FileLoadException:无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

堆栈跟踪:

发生System.Reflection.TargetInvocationException
HResult = 0x80131604 Message = Exception已由调用的目标引发。 Source = mscorlib StackTrace:在System.RuntimeMethodHandle.InvokeMethod(对象目标,Object []参数,签名sig,布尔值构造函数)在System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object []参数,Object []参数)在System .Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder活页夹,Object []参数,CultureInfo文化)
在Owin.Loader.DefaultLoader。<> c__DisplayClass12.b__b(IAppBuilder构建器)处,在Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveApp(StartContext上下文)在Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveApp(StartContext上下文)在Owin.Loader.DefaultLoader。<> c__DisplayClass1.b__0(IAppBuilder构建器) Microsoft.Owin.Hosting.Starting.HostingStarter.Start(StartOptions选项)的Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions选项)的.Owin.Hosting.Engine.HostingEngine.Start(StartContext上下文) .Hosting.WebApp.StartImplementation(IServiceProvider服务,StartOptions选项),位于Microsoft.Owin.Hosting.WebApp.Start(StartOptions选项),位于Microsoft.Owin.Hosting.WebApp.Start [TStartup](StartOptions选项)
在Microsoft.Owin.Hosting.WebApp.Start [TStartup](字符串url)在C:\\ Projects \\ peaknx \\ PNX.OS \\ PNX.REST.Service \\ ServiceAdapter.cs中的PNX.REST.Service.ServiceAdapter.Initialize() :第32行
在C:\\ Projects \\ peaknx \\ PNX.OS \\ PNX.REST.Service \\ PNXRESTService.cs:line 85中的PNX.REST.Service.PNXRESTService.StartAdapter(对象状态)处
在System.Threading.ExecutionContext.RunInternal(ExecutionContext执行上下文,ContextCallback回调,对象状态,布尔值保持SyncCtx)在System.Threading.ExecutionContext.Run(ExecutionContext执行上下文,ContextCallback回调,对象状态)处的System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象状态)处,位于System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()位于System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

内部异常1:FileLoadException:无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

更新:

似乎只有在我的机器上,该构建才将app.config文件复制为ProjectName.Service.exe.config,而在其他所有文件上,它都使用Web.config。

基本上,我从来没有实现过依赖关系重定向,它总是寻找System.Web.Http 4.0.0.0而不是5.2.3.0,因为这部分配置不在ProjectName.Service.exe.config中。

<dependentAssembly> <assemblyIdentity name="System.Web.Http"
publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

已解决:问题是,在安装VS2017时,必须在工作负载中检查“ ASP.NET和Web开发”,以便VS将该项目识别为Web项目并使用Web.config而不是app.config

不幸的是,如果您错过了此步骤,将不会有有用的错误报告,希望这可以帮助某人感谢您的回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM