从vs2013升级到vs2017

时间:2017-10-03 12:18:49

标签: c# asp.net .net asp.net-web-api owin

我们最近从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>

1 个答案:

答案 0 :(得分:0)

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

不幸的是,如果您错过了这一步,将没有有用的错误报告,希望这有助于某人感谢您的答案。