73

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

无法加载文件或程序集“WebGrease,版本=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" />
4

18 回答 18

85

我知道 OP 有点晚了,但我在尝试MVC 4 NuGet 包的 Bootstrap 3 时遇到了同样的问题,在我的情况下,它与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包安装和更新,但我还是运行了它们,然后它全部编译并运行得很好。

于 2014-01-17T17:42:48.137 回答
62

这个错误是因为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>
于 2014-09-24T22:52:57.313 回答
47

您是否尝试过 NuGet ?

Install-Package WebGrease -Version 1.5.1

或者

Install-Package WebGrease -Version 1.5.2
于 2013-11-08T16:16:43.737 回答
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

我希望我能够为上述解决方案不起作用的人提供很好的帮助。

干杯!

于 2015-01-23T23:23:41.050 回答
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”添加到 {project name} 已成功将“WebGrease 1.6.0”添加到 {project name} 正在卸载“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>

请记住,我在本地机器上没有问题,只是在舞台网络服务器上。我想尽我所能在不更新软件包的情况下解决问题,但这是我唯一的解决方法。

于 2015-12-02T00:23:13.093 回答
5

尝试了很多东西,但这有时对我有用,有时是 webgrease 装配问题,有时是 Web.Optimization 装配问题。这对我有用 Microsoft.AspNet.Web.Optimization 1.1.3

Update-Package WebGrease -Version 1.6
于 2016-05-26T20:22:06.200 回答
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 :)

于 2014-07-21T12:56:36.997 回答
4

当您重定向 webgrease 时,请确保您的assemblyBinding元素上没有 applyTo属性。对我来说,我完全删除了它。

在此处输入图像描述

于 2015-09-17T17:12:31.720 回答
2

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

于 2016-10-20T17:22:20.587 回答
2

我使用"Install-Package Microsoft.AspNet.Web.Optimization"(当前版本为 1.1.3)作为启动web-project,默认情况下在 NuGet 控制台中未选中。

NuGet已经创建了一个新的 app.config文件,即使 web.config 预计会更新。

对我来说,它可以将 WebGreasedependentAssembly元素从'sapp.config移到web.config's <runtime><assemblyBinding>...</assemblyBinding></runtime>

于 2017-10-23T21:32:47.833 回答
1

其他答案并没有为我解决这个问题。我们正在添加一个较新的 MVC 5 API 项目,但它与旧的 MVC 2 API 不兼容。运行包更新后,我收到了上述错误。我的解决方案是删除 NuGet 在有问题的项目的 web.config 中添加的 WebGrease 引用。

解决方法: 打开抛出异常的项目的 web.config 并删除或注释掉为 WebGrease 添加的依赖项。

于 2014-02-24T14:08:39.310 回答
1

Alreeasy 解决了这个错误。情况比我想象的要简单。当您从 nuget 新版本的 System.Web.Optimization 安装时,它参考了

// 参考:WebGrease,Version=1.5.1.25624,Culture=neutral,PublicKeyToken=31bf3856ad364e35

同时我有 WebGrease 版本 1.5.2.14234。运行项目,我们有这个错误:无法加载文件或程序集'WebGrease,版本 = 1.5.1.25624

Soo,我尝试在 nuget 上检查这个版本,并感到惊讶,它不是......但是当我用 VS 创建新项目时 - 我明白了。为了破解这个错误,我尝试将它安装在 GAC 中。但是 gac 说我没有订阅这个库。降级到 System.Web.Optimization Version=1.1.0.0 ,其中参考为:

// 参考:WebGrease,Version=1.3.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35

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

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

于 2014-05-08T07:20:03.640 回答
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>
于 2015-03-11T15:59:54.540 回答
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

于 2016-05-28T02:48:07.423 回答
0

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

于 2017-02-10T09:36:40.443 回答
0

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

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

于 2019-11-01T21:51:50.093 回答
0

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

  1. 卸载 Microsoft.AspNet.Web.Optimization nuget 包。
  2. 卸载 Antlr nuget 包,因为它依赖于 WebGrease 包。
  3. 卸载 WebGrease nuget 包。
  4. 再次安装 Microsoft.AspNet.Web.Optimization nuget 包,此操作将负责安装 Antlr 和 WebGrease,因为它们是它的依赖项。
于 2019-11-13T08:21:56.993 回答
0

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

基本上,在合并期间,其中一个绑定重定向已损坏,并且最终在一个<dependentAssembly>标记中包含两个程序集重定向。

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

于 2020-04-14T12:37:33.300 回答