具有程序集依赖性的NGen错误

时间:2013-09-07 05:32:45

标签: c# asp.net-mvc-4 ngen google-api-dotnet-client assembly-binding-redirect

我有一个显然不是新问题,但我仍然无法找到答案。

我正在使用谷歌的.NET分析API,并且我正在努力让程序集很好地协同工作。当我通过Visual Studio 2012构建时,我没有遇到任何构建错误。但是,当我开始使用NGen预编译项目时,我看到了很多错误的程序集引用。

我正在使用MVC 4,Visual Studio 2012和最新的Google.Apis软件包(目前为1.5.0.1-beta)。

我在相关项目中安装的.dll /版本是:

DotNetOpenAuth, Version 4.0.0.11165  
System.Web.Mvc, Version 4.0.0.0  
System.Net.Http.Primitives, Version 4.2.13.0  
log4net, Version 1.2.11.0
Google.Apis, Version 1.5.0.1-beta

以下是我在NGen输出中发现的错误:

Failed to load dependency System.Net.Http.Primitives of assembly Google.Apis, Version=1.4.0.28227, Culture=neutral, PublicKeyToken=null because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Failed to load dependency System.Web.Mvc of assembly DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Failed to load dependency log4net of assembly DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

这就是我在该项目中的web.config:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
    <bindingRedirect oldVersion="1.0.0.0-1.2.11.0" newVersion="1.2.11.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.13.0" newVersion="4.2.13.0" />
  </dependentAssembly>
</assemblyBinding>
</runtime>

我相信大部分内容都是在我使用NuGet安装Google.Apis软件包时构建的,但我无法弄清楚为什么程序集绑定重定向不会阻止来自NGen的这些错误。

如果有人能帮我指出正确的方向,我真的很感激!谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试使用/ ExeConfig向NGEN提供应用程序的配置文件?对于Web应用程序,您可能需要将web.config复制到app.exe.config并将路径传递到web-app目录中不存在的app.exe。