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

Posted

技术标签:

【中文标题】无法加载文件或程序集“WebGrease,版本=1.5.1.25624,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一【英文标题】:Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies 【发布时间】: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" />

【问题讨论】:

【参考方案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 版。按照上述说明,但适当更新新版本,它工作: 简单高效的回答。谢谢 这是根本原因:***.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 进行版本控制,而我是团队中唯一遇到此问题的人。

唯一对我有用的是:

    卸载 Microsoft.AspNet.Web.Optimization 在 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】:

这是我为解决它所做的,

    我将当前(损坏的项目)的 Web.config 文件的副本保存到“Corrupted-Web.Config”。并关闭项目解决方案。 创建了一个与我损坏的项目相同类型的新应用程序。称之为 ProjTemp。 保存并运行“PorjTemp”,然后将 Web.Config 的副本保存到 "OrigTemp_Web.config" 关闭 Web.config 文件。 在“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>

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

这里是更正后的版本,例如 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 相同的问题,并通过执行以下操作设法解决了它:

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

【讨论】:

【参考方案18】:

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

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

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

【讨论】:

以上是关于无法加载文件或程序集“WebGrease,版本=1.5.1.25624,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一的主要内容,如果未能解决你的问题,请参考以下文章

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集,但已加载

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝