【问题标题】:Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies无法加载文件或程序集“WebGrease,版本=1.5.1.25624,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一
【发布时间】:2013-11-20 00:59:19
【问题描述】:

我有一个 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" />

【问题讨论】:

    标签: c# .net asp.net-mvc-4 dll webgrease


    【解决方案1】:

    我知道 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.6 版并为我修复了错误。这只是一个版本问题。
    • 对于在 WebForms 上下文中使用,还有包 Microsoft.AspNet.Web.Optimization.WebForms,您应该在提到 Microsoft.AspNet.Web.Optimization 的行之前/之后添加它。
    • 并重新启动 Visual Studio 以使上述命令完全生效。
    • 执行此操作时,请确保 web.config 中的配置标记上没有 xmlns 属性,如果这样做会在您的 assemblyBinding 标记上生成无效的 xmlns 属性。
    • (复制/粘贴 nuget 命令时,确保批处理中的最后一个命令执行。它可能会坐在那里等待命令提示符,例如 Update-Package WebGrease)这个答案有帮助。但后来我也错过了 web.config 条目。也请参阅@andrerpena 答案。
    【解决方案2】:

    此错误是因为 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>
    

    【讨论】:

    • 问题确实很简单,所以这个答案应该很容易帮助
    • 这为我解决了问题。我更新了一个新项目的所有包并获得了 1.6 版。按照上述说明,但适当更新新版本,它工作:
    • 简单高效的回答。谢谢
    • 这是根本原因:stackoverflow.com/a/46898880/1145224 为什么会发生这种情况以及在哪里可以找到正确的dependentAssembly 配置。
    • 作为 web.config 的“非专家”,我想我会提到dependentAssembly 是这样嵌套的:
    【解决方案3】:

    你尝试过 NuGet 吗?

    Install-Package WebGrease -Version 1.5.1
    

    Install-Package WebGrease -Version 1.5.2
    

    【讨论】:

    • 我在项目中可以找到的任何引用都指向 1.5.2,但不知何故我仍然收到此错误。 'Install-Package WebGrease -Version 1.5.2' 对我有用。它所做的只是将它添加到我的 web.config: 1.5.2.14234" />
    • 我必须手动将以上内容添加到 web.config 中,但这为我解决了问题。
    • 我已经尝试了此页面上的所有建议,但无法克服此错误。我创建了一个干净的 MVC Web 应用程序(.net 框架),但在 _Layout.cshtml 中的 @Styles.Render("~/Content/css") 上出现错误。不知道还能做什么。将 Microsoft.AspNet.Web.Optimization 1.1.3 与 WebGrease 1.5.2 或 1.6 一起使用仍会导致“无法加载文件或程序集 'WebGrease,版本 = 1.5.1.25624”。将 bindingRedirect 更新到 web.config 也不起作用。有人可以帮忙吗?
    【解决方案4】:

    对我来说,上述情况都不起作用。

    试了两天,终于找到了解决办法。

    我所做的是,我同时卸载了 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 编码愉快!
    • 您的解决方案有效,这太疯狂了。我刚刚下载了 VS 2013 CTP 并将一个新的 MVC 5 项目部署到一个新的 Win Server 2012 R2 并且我收到了 WebGrease 错误......即使在更新了 Web.Config 之后,您的解决方案也是唯一有效的解决方案。
    • @InContext 我遇到了同样的问题,正如我上面所说,线程中的任何解决方案都没有帮助我,但这个。编码愉快!
    • 还意识到(更重要的是)我的 Web.Config 不在正确的位置,因此 bindingRedirect 没有被使用...在排序后也解决了这个问题!
    【解决方案5】:

    我观察到的问题与 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>
    

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

    【讨论】:

      【解决方案6】:

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

      Update-Package WebGrease -Version 1.6
      

      【讨论】:

      • 这对我有用。尝试安装 1.5.1 会引发错误,因为依赖关系会中断。
      • 是的,这个版本显然存在一些错误。他们在 1.6 中修复了它
      【解决方案7】:

      老歌但老歌...

      我在 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 的人有所帮助 :)

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

          • 也许您可以进一步解释以使您的答案更清楚?
          • 在 Visual Studio 中打开 packages.config 并转到 注释掉重复的
          【解决方案10】:

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

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

          对我来说,将 WebGreasedependentAssembly 元素从 app.config 移动到 web.config&lt;runtime&gt;&lt;assemblyBinding&gt;...&lt;/assemblyBinding&gt;&lt;/runtime&gt; 是有效的。

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

              Alreasy 解决了这个错误。情况比我想象的要简单。当您从 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 库引用了未订阅的 webgrease dll 版本。

              【讨论】:

                【解决方案13】:

                我在部署期间遇到了这个问题。

                我将 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>
                

                【讨论】:

                  【解决方案14】:

                  这是我为解决它所做的,

                  1. 我将当前(损坏的项目)的 Web.config 文件的副本保存到“Corrupted-Web.Config”。并关闭项目解决方案。
                  2. 创建了一个与我损坏的项目相同类型的新应用程序。称之为 ProjTemp。
                  3. 保存并运行“PorjTemp”,然后将 Web.Config 的副本保存到 "OrigTemp_Web.config"
                  4. 关闭 Web.config 文件。
                  5. 在“ProjTemp”打开工具-->“NuGet 包管理器”-->“管理 NuGet Packages for Solutions" ---> 选择更新所有相关 已安装的软件包。 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>
                  

                  这就是我为修复它所做的工作,Solution on Github Sami, Oweis 4 计算机

                  【讨论】:

                    【解决方案15】:

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

                    【讨论】:

                    • 这类语句比较适合做cmet,赚够rep然后评论。
                    • 我只是分享另一个可能出现同样问题的场景。即使听起来很幼稚,这也可能在部署过程中发生错误。所以解决方案就是在这种情况下将Web.config文件部署到服务器上。你可以自己测试一下。
                    • 谢谢,我就是这样
                    【解决方案16】:

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

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

                    【讨论】:

                      【解决方案17】:

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

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

                      【讨论】:

                        【解决方案18】:

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

                        基本上,在合并期间,其中一个绑定重定向已损坏,最终在一个 &lt;dependentAssembly&gt; 标记内出现两个程序集重定向。

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

                        【讨论】:

                          猜你喜欢
                          • 2014-10-01
                          • 2014-07-18
                          • 2014-02-06
                          • 2016-11-07
                          • 2016-12-04
                          • 1970-01-01
                          • 2016-08-05
                          • 1970-01-01
                          • 2016-03-31
                          相关资源
                          最近更新 更多