无法加载文件或程序集“WebGrease,Version=1.5.1.25624,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其某个依赖项。

72

我有一个MVC4 Web API项目,在运行服务项目时遇到了错误:

无法加载文件或程序集“WebGrease,Version=1.5.1.25624,Culture=neutral,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" />
19个回答

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

对我来说,前两行没有任何效果,因为这些包已经由Bootstrap 3 for MVC 4包安装和更新了,但我还是运行了它们,然后一切都编译和运行得很好。


1
我很幸运,它更新到了1.6版本并为我修复了错误。这只是一个版本问题。 - Piotr Kula
在WebForms上下文中使用时,还有一个包Microsoft.AspNet.Web.Optimization.WebForms,您应该在提到Microsoft.AspNet.Web.Optimization的行之前/之后添加它。 - Uwe Keim
同时,重新启动Visual Studio以完全生效上述命令。 - Uwe Keim
在进行此操作时,请确保您的web.config配置标记上没有xmlns属性,如果有,则会在您的assemblyBinding标记上生成一个无效的xmlns属性。 - Peter
1
(当复制/粘贴NuGet命令时,请确保批处理中的最后一个命令被执行。它可能会在命令提示符上等待。例如,Update-Package WebGrease) 这个答案很有帮助。但是我之后还缺少了web.config条目。请参考@andrerpena的答案。 - Valamas
在我的情况下,这个错误出现在服务器上,而服务器没有Visual Studio,也没有开发环境。我只是安装了IIS来托管网站。我猜上面的答案是使用Visual Studio安装包,但我该如何在Windows服务器上做到呢?有人能指导我吗? - Haseeb

64
这个错误是因为Microsoft.AspNet.Web.Optimization 1.1.3内部引用了WebGrease 1.5.1.25624,尽管该Nuget包本身依赖于WebGrease 1.5.2.14234。显然,在创建Nuget包时有人出了差错。
要解决这个问题,在你的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>

10
这个对我有帮助。我在一个新项目上更新了所有包并得到了1.6版本。按照上面的指示,但适当更新了新版本,它起作用了:<bindingRedirect oldVersion="0.0.0.0-1.5.1.25624" newVersion="1.6.5135.21930" />。 - Todd
我在想这是怎么发生的,因为NuGet通常会自动更新这些程序集绑定重定向。发生这种情况的项目也有一个App.config文件(该文件已从项目中排除,但文件仍然存在)。看起来NuGet将绑定重定向添加到了app.config中,但没有添加到web.config中(将其添加到web.config中也为我解决了问题)。 - danludwig
2
简单而高效的答案。谢谢。 - Samuel Diogo
1
以下是根本原因:https://dev59.com/xGIj5IYBdhLWcg3w04Mo#46898880,为什么会发生这种情况以及在哪里找到正确的“dependentAssembly”配置。 - Anton Lyhin
3
作为一个对 web.config 不是很熟悉的人,我想提一下 dependentAssembly 是这样嵌套的: <configuration> <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
- Gary Huckabone
显示剩余2条评论

47

你尝试过通过 NuGet 吗?

Install-Package WebGrease -Version 1.5.1
或者
Install-Package WebGrease -Version 1.5.2

10
我在项目中找到的所有参考资料都指向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> - Sean
4
我不得不手动将以上内容添加到web.config中,但这对我解决了问题。 - Timm
我尝试了这个页面上所有的建议,但是无法解决这个错误。我创建了一个干净的MVC Web应用程序(.net框架),但在_Layout.cshtml中的@Styles.Render("~/Content/css")出现错误。不确定还能做什么。使用Microsoft.AspNet.Web.Optimization 1.1.3和WebGrease 1.5.2或1.6仍然会导致"Could not load file or assembly 'WebGrease, Version=1.5.1.25624"。更新web.config中的bindingRedirect也没有起作用。有人可以帮忙吗? - user3321095

17

对于我来说,以上所有情况都没有起作用。

尝试了两天后,我终于找到了解决方案。

我所做的是卸载 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条目,但是对我来说这个方法有效,谢谢! - Jensen
@Jensen 祝编码愉快! - jparthj
你的解决方案奏效了,这太神奇了。我刚刚下载了VS 2013 CTP,并将一个新的MVC 5项目部署到了一个新的Win Server 2012 R2上,但我收到了WebGrease错误...即使更新了Web.Config,你的解决方案也是唯一有效的。 - InContext
@InContext 我也遇到了同样的问题,就像我之前所说的那样,这个帖子中的所有解决方案都没有帮助到我,但是这个解决方案确实有效。祝编码愉快! - jparthj
同时意识到(更重要的是),我的Web.Config文件没有放在正确的位置,因此bindingRedirect未被使用...解决了这个问题后,一切都得到了修复! - InContext
我的网站在开发机上运行良好,但在部署服务器上却无法正常工作。我遵循了以上步骤,重新部署了网站,现在它已经可以正常工作了。谢谢。 - Haseeb

8

我观察到的问题与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
1
是的,显然这个版本存在一些错误。他们已经在1.6版中修复了它。 - Ali Umair

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时,请确保您的 assemblyBinding 元素上没有 appliesTo 属性。 对于我来说,我完全删除了它。 enter image description here

2

由于我无法使用包管理器控制台卸载,我手动去到 packages.config 并注释掉旧版本。


也许你可以进一步解释,以使你的回答更清晰明了? - Ali Bdeir
在Visual Studio中打开packages.config文件,然后找到<package id="WebGrease" version="1.5.2" targetFramework="net461" />,将重复的部分注释掉。 - user3557878

2

我在启动Web项目时使用了"Install-Package Microsoft.AspNet.Web.Optimization"(当前版本为1.1.3),这个包默认情况下没有在NuGet控制台中选择。

但是,NuGet已经创建了一个新的app.config文件,尽管应该更新web.config

对我来说,将app.config中的WebGrease dependentAssembly元素移动到web.config<runtime><assemblyBinding>...</assemblyBinding></runtime>中可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接