我们最近从Visual Studio社区2013升级到了2017社区。我的REST服务项目在启动后开始破解(构建通行证)。这只发生在3台机器中的一台上。 我们使用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消息=目标已抛出异常 一个调用。 Source = mscorlib StackTrace:at System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] 参数,签名sig,布尔构造函数)at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object []参数,Object []参数)at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)
在 Owin.Loader.DefaultLoader<> c__DisplayClass12.b__b(IAppBuilder 建设者) Owin.Loader.DefaultLoader<> c__DisplayClass1.b__0(IAppBuilder 建设者) Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveApp(StartContext 上下文) Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext 上下文) Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions 选项)at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions 选项)at Microsoft.Owin.Hosting.WebApp.StartImplementation(的IServiceProvider 服务,StartOptions选项)at Microsoft.Owin.Hosting.WebApp.Start(StartOptions选项)at Microsoft.Owin.Hosting.WebApp.Start [TStartup](StartOptions选项)
在Microsoft.Owin.Hosting.WebApp.Start [TStartup](String url)at PNX.REST.Service.ServiceAdapter.Initialize()in C:\ Projects \ peaknx \ PNX.OS \ PNX.REST.Service \ ServiceAdapter.cs:第32行
在PNX.REST.Service.PNXRESTService.StartAdapter(对象状态)中 C:\ Projects \ peaknx \ PNX.OS \ PNX.REST.Service \ PNXRESTService.cs:第85行
在 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象 国家) System.Threading.ExecutionContext.RunInternal(执行上下文 executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)at System.Threading.ExecutionContext.Run(执行上下文 executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在System.Threading.ThreadPoolWorkQueue.Dispatch()at 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>
答案 0 :(得分:0)
解决:问题是,在安装VS2017时,您必须检查&#34; ASP.NET和Web开发&#34;在工作负载中,以便VS将项目识别为Web项目并使用Web.config而不是app.config
不幸的是,如果您错过了这一步,将没有有用的错误报告,希望这有助于某人感谢您的答案。