无法加载文件或程序集“WebGrease”之一的依赖项。定位的程序集的清单定义与程序集引用不匹配

时间:2014-01-03 17:02:04

标签: c# asp.net asp.net-mvc bundling-and-minification asp.net-optimization

这个问题有很多解决方案,请阅读下面的所有答案,它们也可以帮助您解决问题。如果您找到解决此问题的新方法,请在答案中记录

我正在尝试将System.Web.Optimization添加到我的ASP.NET Web Forms解决方案中。 我通过NuGet包添加了Microsoft ASP.NET Web Optimization Framework。它将Microsoft.Web.Infrastracture和WebGrease(1.5.2)添加到参考文献中。

然而,当我跑

<%= System.Web.Optimization.Scripts.Render("~/bundles/js")%>

我收到运行时错误

Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我尝试将assemblyBinding添加到Web.Config

<runtime>
  <legacyUnhandledExceptionPolicy enabled="1"/>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.5.1.25624" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
</runtime>

但没有任何运气。

我注意到我的WebSite的Web配置包含这一行

 <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

如果我用

替换它
 <configuration>

然后一切正常,我没有得到运行时错误。不幸的是,我需要xmlns。我项目的其他组成部分依赖于它。

为什么当架构指向v2.0时,Optimization会尝试加载旧版本?有没有办法强制它加载最新或唯一可用的WebGrease.dll?

如果不改变

,我还可以尝试什么
 <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> ?

感谢您提供任何帮助!

编辑: 1)附加FusionLog结果。也许它会有所帮助

=== Pre-bind state information ===
LOG: User = [USER]
LOG: DisplayName = WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Projects/PROJECT_NAME/trunk/www.PROJECT_NAME.com/
LOG: Initial PrivatePath = C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\bin
Calling assembly : System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\web.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35

2)确认,问题在

<configuration  xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

但是,我不明白为什么

8 个答案:

答案 0 :(得分:24)

我在prod服务器上遇到了这个问题,而在开发者机器上一切正常。这些行帮助:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.0" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

答案 1 :(得分:16)

最后,问题发生在<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">。它导致Render方法加载错误的WebGrease程序集。

删除xmlns解决了我的问题。

答案 2 :(得分:5)

我修改了我的web.config文件,以便newVersion =&#34; 1.0.0.0&#34;匹配我的Referenced文件版本:

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.0.0.0" />
  </dependentAssembly>

答案 3 :(得分:3)

以防它对任何人有帮助,我遇到了同样的问题,但发现它是由WebGrease的依赖程序集引起的,即Antlr3。通过NuGet安装时,它已将以下内容添加到runtime中的web.config元素:

  <dependentAssembly>
    <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
  </dependentAssembly>

只需删除此问题即可修复。

答案 4 :(得分:1)

就我而言,我的web.config文件中的问题原来是XML Processing Instruction (PI)<?blah ... ?>)。完全合法的XML!但它导致出现此错误信息并让我查看所有错误的地方。

我的web.config看起来类似于以下内容 - 请注意connectionStrings部分中的XML PI:

<configuration>
    ...
    <connectionStrings>
        <?blah ... ?>
        <add name="AppDb" ... />
    ...
    </connectionStrings>
    ...
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            ...
            <dependentAssembly>
                <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
            </dependentAssembly>
            ...
        </assemblyBinding>
    </runtime>
    ...
</configuration>

请注意,XML PI <?blah ... ?>位于connectionStrings部分 - 即assemblyBinding部分附近,bindingRedirect WebGrease部分等等(这是正确的!)。

答案 5 :(得分:0)

我遇到了同样的问题,但这是将解决方案从我的本地开发计算机复制到我们存储项目的网络驱动器的结果。当我从映射驱动器打开解决方案时,我无法使引用正常工作,并且我一直收到此错误。我找到的特定问题的临时解决方法是从其UNC路径而不是映射的驱动器号中打开解决方案。

答案 6 :(得分:0)

在网络表单网站.net 4.5中遇到了同样的问题。简单更新nuget包到最后一个版本帮助了我。

答案 7 :(得分:0)

我最终获得了2个WebGrease的运行时assemblyBinding条目。删除旧版本(版本1.5.2)解决了我的问题。

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31BF3856AD364E35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>