无法加载文件或程序集“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 版。按照上述说明,但适当更新新版本,它工作:dependentAssembly
配置。
作为 web.config 的“非专家”,我想我会提到dependentAssembly 是这样嵌套的:你尝试过 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.Optimization 和 WebGrease。
我知道这个优化程序集内部引用了 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 并转到我使用"Install-Package Microsoft.AspNet.Web.Optimization"
(当前版本为1.1.3)启动web-project,在NuGet控制台默认没有选中。
但是 NuGet 已经创建了一个新的 app.config 文件,即使 web.config 是 预计会更新。
对我来说,将 WebGreasedependentAssembly 元素从 app.config
移动到 web.config
的 <runtime><assemblyBinding>...</assemblyBinding></runtime>
是有效的。
【讨论】:
【参考方案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 的运行时问题。
基本上,在合并期间,其中一个绑定重定向已损坏,最终在一个 <dependentAssembly>
标记内出现两个程序集重定向。
因此,如果您遇到此问题并且您已经为 WebGrease 正确设置了绑定重定向,则值得扫描所有其他程序集绑定重定向以检查它们是否已损坏。
【讨论】:
以上是关于无法加载文件或程序集“WebGrease,版本=1.5.1.25624,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一的主要内容,如果未能解决你的问题,请参考以下文章
能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名
无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0
无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配