无法加载文件或程序集'WebGrease,版本= 1.5.1.25624,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一


71

我有一个MVC4 Web API项目。运行服务项目时出现错误

无法加载文件或程序集“ WebGrease,版本= 1.5.1.25624,区域性=中性,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。该系统找不到指定的文件。

我已经添加了WebGrease.dll文件,但仍然出现错误

并尝试更改web.config

<bindingRedirect oldVersion="0.0.0.0-1.3.0.0"/>"

<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />

Answers:


46

您是否尝试过NuGet?

Install-Package WebGrease -Version 1.5.1

要么

Install-Package WebGrease -Version 1.5.2

9
我在项目中可以找到的所有引用都指向1.5.2,但我仍然以某种方式仍然遇到此错误。“ Install-Package WebGrease -Version 1.5.2”对我有用。它所做的只是将其添加到我的web.config中:<dependentAssembly> <assemblyIdentity name =“ WebGrease” publicKeyToken =“ 31bf3856ad364e35” culture =“ neutral” /> <bindingRedirect oldVersion =“ 0.0.0.0-1.5.2.14234” newVersion =“ 1.5.2.14234“ /> </ dependentAssembly>
肖恩

3
我不得不手动将以上内容添加到web.config中,但这对我来说解决了。
Timm

85

我知道对OP来说有点晚了,但是在尝试Bootstrap 3 for MVC 4 NuGet程序包时遇到了相同的问题,在我的情况下,它与Microsoft.AspNet.Web.Optimization程序包有关,并且设法找到一个简单的解决方案。

尝试在程序包管理器控制台中执行以下命令:

Install-Package Microsoft.AspNet.Web.Optimization
Update-Package WebGrease
Uninstall-Package Microsoft.AspNet.Web.Optimization
Uninstall-Package WebGrease
Install-Package Microsoft.AspNet.Web.Optimization
Update-Package WebGrease

前两行对我没有影响,因为这些软件包已经由用于MVC 4Bootstrap 3软件包安装和更新,但是无论如何我都运行它们,然后全部编译并运行良好。


1
我很幸运,它更新为1.6版,并为我修复了该错误。它只是一个版本问题。
Piotr Kula 2014年

为了在WebForms上下文中使用,还有一个包Microsoft.AspNet.Web.Optimization.WebForms,您应该在Microsoft.AspNet.Web.Optimization提到的行之前/之后添加。
Uwe Keim 2014年

并重新启动Visual Studio,以充分利用上述命令。
Uwe Keim 2014年

这样做时,请确保web.config中的配置标记上没有xmlns属性,如果这样做会在assemblyBinding标记上生成无效的xmlns属性。
彼得

1
(复制/粘贴nuget命令时,请确保执行了该批处理中的最后一个。它可能坐在那里等待命令提示符,例如Eg Update-Package WebGrease)。但是之后我也缺少了web.config条目。参见@andrerpena答案。
Valamas 2015年

59

此错误是因为即使Nuget程序包本身具有对的依赖,也Microsoft.AspNet.Web.Optimization 1.1.3内部引用。创建Nuget软件包时,显然有人搞砸了。WebGrease 1.5.1.25624WebGrease 1.5.2.14234

要解决此问题,请在中添加此程序集绑定Web.Config

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

问题确实很简单,所以这问题很容易解决
Medet Tleukabiluly 2014年

为什么哦WHYYY内部引用1.5.1 :(
Highmastdon,2015年

10
这为我解决了。我在一个新项目上更新了所有软件包,并获得了1.6版。遵循上述说明,但是适当地更新了新版本,它可以正常工作:<bindingRedirect oldVersion =“ 0.0.0.0-1.5.1.25624” newVersion =“ 1.6.5135.21930” />
Todd

2
简单有效的答案。谢谢
塞缪尔·迪奥戈

2
作为使用web.config的“非专家”,我想提到的是dependentAssembly的嵌套方式:<configuration> <runtime> <assemblyBinding xmlns =“ urn:schemas-microsoft-com:asm.v1”> <dependentAssembly>
加里·哈卡伯尼

15

对我而言,以上方案均无效。

经过两天的尝试,终于找到了解决方案。

我所做的是,我同时卸载了Microsoft.AspNet.Web.OptimizationWebGrease

我知道此优化程序集在内部是指WebGrease 1.5.1。所以我选择了一个不参考WebGrease 1.5.1的优化版本。

我运行以下命令以使所有功能正常运行。

Uninstall-Package Microsoft.AspNet.Web.Optimization
Uninstall-Package WebGrease
Install-Package Microsoft.AspNet.Web.Optimization -Version 1.1.0

我希望对于以上解决方案不起作用的人,我能够提供很好的帮助。

干杯!


还必须手动更新web.config条目,但是是的,这对我有用,谢谢!
詹森

@詹森快乐编码!
jparthj 2015年

您的解决方案有效,这太疯狂了。我刚刚下载了VS 2013 CTP,并在新的Win Server 2012 R2中部署了一个新的MVC 5项目,即使在更新Web之后,我仍然收到WebGrease错误。配置是您唯一可行的解​​决方案。
InContext 2015年

@InContext我遇到了同样的问题,正如我上面所说的,线程中的解决方案都没有帮助我,但这是。祝您编码愉快!
jparthj

我还意识到(更重要的是)我的Web.Config不在正确的位置,因此没有使用bindingRedirect。
InContext 2015年

7

我观察到的问题与Jidheesh Rajan提到的非常接近。但是,从Nuget软件包管理器更新软件包(未指定版本)不能解决该问题。这是我必须解决的问题。(本质上,我明确将WebGrease更新为版本1.6)

在Visual Studio的程序包管理器控制台中,将WebGrease显式更新为1.6版。这是命令。

Install-Package WebGrease -Version 1.6

输出应为

Removing 'WebGrease 1.5.2' from {project name}

将'WebGrease 1.6.0'添加到{项目名称}已成功将'WebGrease 1.6.0'添加到{项目名称}卸载'WebGrease 1.5.2'。已成功卸载“ WebGrease 1.5.2”。

最终使用以下命令更新了web.config

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

这也导致从csproj文件中删除了一行。

<WebGreaseLibPath>..\packages\WebGrease.1.5.2\lib</WebGreaseLibPath>

以及csproj文件中此节点的更新

<Reference Include="WebGrease, Version=1.5.2.14234, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

对此

<Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

请记住,我在本地计算机上没有问题,只是在舞台Web服务器上。我想尽最大的努力来解决此问题而不更新软件包,但这是我唯一的解决方法。


5

尝试了很多事情,但这对我有用,有时是Webgrease组装问题,有时是Web.Optimization组装问题。这适用于Microsoft.AspNet.Web.Optimization 1.1.3

Update-Package WebGrease -Version 1.6

这对我有用。尝试安装1.5.1会引发错误,因为依赖关系可能会中断。
peter.swallow '16

1
是的,显然此版本中存在一些错误。他们已将其修复为1.6
阿里乌梅尔

4

老歌但戈尔迪...

我当时在Visual Studio 2013中从事MVC 5项目,但我遇到了同样的问题。我们使用Visual SVN进行版本控制,而我是团队中唯一出现此问题的人。

唯一对我有用的是:

  1. 卸载Microsoft.AspNet.Web.Optimization
  2. 在Nuget命令提示符下运行:install-package Microsoft.AspNet.Web.Optimization -Version 1.0.0

这将安装较旧版本的Web.Optimization。该项目最初引用的是1.1.0版。问题不在于WebGrease,而在于System.Web.Optimization.dll,它引用了一个旧的,不存在的WebGrease版本。

当我运行该项目时,它起作用了,但是我想使用与团队其他成员相同的软件包版本。所以,我尝试更新,但是...返回了错误...

此后,我再次删除了该项目,并将其从SVN中取回。令我惊讶的是,它开始起作用了……问题是在此之前,我已经完全删除了该项目,并多次从SVN中删除它。我什至从同事那里获取了dll,因为我以为我可能是从NuGet获取了损坏的文件,但无济于事。

希望有一天,这对某人有帮助。.使用Visual Studio 2016和MVC 8 :)


4

当您重定向webgrease确保你没有一个appliesTo您的属性assemblyBinding元素。对我来说,我将其完全删除。

在此处输入图片说明


2

由于无法使用软件包管理器控制台进行卸载,因此我手动packages.config访问了旧版本并注释掉了旧版本。


也许您可以进一步解释以使答案更清晰?
Ali Bdeir '16

在Visual Studio中打开packages.config,然后转到<package id =“ WebGrease” version =“ 1.5.2” targetFramework =“ net461” />注释掉重复的一个
user3557878

2

我使用"Install-Package Microsoft.AspNet.Web.Optimization"了starup web-project(当前版本为1.1.3),默认情况下未在NuGet控制台中选择该项目

但是,即使有望更新web.config,NuGet还是创建了一个新的app.config文件。

对于我来说,努力WebGrease dependentAssembly移动元素从app.configweb.config<runtime><assemblyBinding>...</assemblyBinding></runtime>


1

其他答案并没有为我解决这个问题。我们正在添加一个较新的MVC 5 API项目,但与较旧的MVC 2 API的配合并不理想。运行软件包更新后,出现了上述错误。对我来说,解决方案是删除由NuGet在有问题的项目的web.config中添加的WebGrease引用。

解决: 打开引发异常的项目的web.config,并删除或注释掉为WebGrease添加的依赖项。


1

Alreasy解决了此错误。情况比我想象的简单。当您从nuget发行新版本的System.Web.Optimization时,它具有对

//参考:WebGrease,版本= 1.5.1.25624,文化=中性,PublicKeyToken = 31bf3856ad364e35

同时我有WebGrease版本1.5.2.14234。正在运行的项目,我们出现此错误:无法加载文件或程序集'WebGrease,版本= 1.5.1.25624

如此,我尝试在nuget上检查此版本,但感到惊讶,不是。但是当我使用VS创建新项目时-我明白了。要破解此错误,我尝试将其安装在GAC中。但是gac告诉我,该lib未订阅。降级到System.Web.Optimization版本= 1..1.0.0,其中参考是:

//参考:WebGrease,版本= 1.3.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35

和1.3.0.0强烈订阅-帮助了我。有用。升级webgrease后,我将它的版本设置为1.6.5135.21930,并且运行良好。

最后,我有一个观点,就是这个错误(无法加载文件或程序集'WebGrease,版本= 1.5.1.25624)是因为System.Web.Optimization lib被引用到未订阅的webgrease dll版本。


1

我在部署过程中遇到了这个问题。

我将WebGrease.dll复制到了生产环境中,但是我也忘记了更新Web.Config文件。

<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.14234" newVersion="1.5.2.14234" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

0

这是我为解决此问题所做的工作,

  1. 我将当前(损坏的项目)的Web.config文件的副本保存到“ Corrupted-Web.Config”。并关闭项目解决方案。
  2. 使用与我的项目相同的类型创建了一个新应用程序。称之为ProjTemp。
  3. 保存并运行“ PorjTemp”,然后将Web.Config的副本保存到“ OrigTemp_Web.config”
  4. 关闭Web.config文件。
  5. 在“ ProjTemp”上,打开工具->“ NuGet软件包管理器”->“为解决方案管理NuGet软件包” --->选择以更新所有相关的已安装软件包。6现在,打开新更新的Web.config文件。复制更新后的“”中的“从...开始”获取的信息

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
             --- Copy this section to replace in the corrupted file.---
       </assemblyBinding>
</runtime>

  1. 保存您的项目。重建并运行。希望这会有所帮助!....

这是经过更正的示例,例如VS2015。


<runtime>
           <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                 <dependentAssembly>
                        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
                        <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
                 </dependentAssembly>
                <dependentAssembly>
                        <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
                        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
              </dependentAssembly>
              <dependentAssembly>
                        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
                        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /
              </dependentAssembly>
              <dependentAssembly>
                        <assemblyIdentity name="Microsoft.Owin" culture="neutral" publicKeyToken="31bf3856ad364e35" />
                        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /
                </dependentAssembly>
                <dependentAssembly>
                        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" culture="neutral" publicKeyToken="31bf3856ad364e35" />
                        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
                </dependentAssembly>
                <dependentAssembly>
                        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" culture="neutral" publicKeyToken="31bf3856ad364e35" />
                        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
                 </dependentAssembly>
                 <dependentAssembly>
                        <assemblyIdentity name="Microsoft.Owin.Security" culture="neutral" publicKeyToken="31bf3856ad364e35" />
                         <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
                  </dependentAssembly>
                  <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>
          </assemblyBinding>
  </runtime>

这就是我所做的修复,在Github Sami,Oweis 4 Computer上的解决方案


0

如果您不将Web.config文件部署到Web服务器,也可能会出现此问题。


2
这些类型的语句更适合用作注释,赢得足够的代表然后进行注释。
卡兰·

我只是在分享另一个可能出现相同问题的方案。即使听起来很幼稚,在部署过程中也会发生错误。因此,解决方案是在这种情况下将Web.config文件部署到服务器。您可以自己测试。
大卫·桑切斯

1
谢谢,对我来说就是这种情况
克里斯·赖特

0

VS 2017似乎存在不部署web.config的问题,即使该文件的属性设置为“始终复制”。在我的项目中,我必须针对各种部署方案交换不同的web.config文件。如果未部署文件,将出现“ webgrease”错误。

只需验证web.config文件是否已部署即可。


0

我曾经遇到过相同的问题,并通过执行以下操作设法解决了这个问题:

  1. 卸载Microsoft.AspNet.Web.Optimization nuget程序包。
  2. 卸载Antlr nuget软件包,因为它依赖于WebGrease软件包。
  3. 卸载WebGrease nuget软件包。
  4. 再次安装Microsoft.AspNet.Web.Optimization nuget程序包,此操作将负责安装Antlr和WebGrease,因为它们是它们的依赖项。

0

就我而言,上述任何解决方案都无法解决。与webgrease有关的错误实际上是一个红色鲱鱼……这是一个无效(且完全不相关)的程序集绑定重定向的问题。我猜想我的web.config文件存在此问题,导致所有程序集绑定重定向均失败,并且恰好这导致WebGrease出现运行时问题。

基本上,在合并过程中,绑定重定向之一已损坏,并且最终在一个单一的程序中导致了两个程序集重定向 <dependentAssembly>标记。

因此,如果遇到此问题,并且已经为WebGrease正确设置了绑定重定向,则值得对所有其他程序集绑定重定向进行扫描,以检查它们是否已损坏。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.