从NuGet升级到webgrease 1.5.1.25624后,出现了System.IO.FileLoadException错误。

37
我是 asp.net 死亡页面,在使用 Nuget 更新 WebGrease 和 Bootstrap 以适用于 mvc4 后出现的问题。
服务器错误在 '/' 应用程序中发生。
无法加载文件或程序集 'WebGrease' 或其某个依赖项。强名称签名无法验证。该程序集可能已被篡改,或者它是延迟签名但未完全使用正确的私钥进行签名。(HRESULT 的异常代码为 0x80131045)描述:当前 Web 请求执行期间发生未处理的异常。请检查堆栈跟踪以获取有关该错误及其源位置的更多信息。
异常详细信息:System.IO.FileLoadException:无法加载文件或程序集“WebGrease”或其某个依赖项。强名称签名无法验证。该程序集可能已被篡改,或者它是延迟签名但未完全使用正确的私钥进行签名。(HRESULT 的异常代码为 0x80131045)
源错误:
在当前 Web 请求执行期间生成了一个未处理的异常。可以使用以下异常堆栈跟踪信息标识异常的来源和位置。
程序集载入跟踪:以下信息有助于确定为什么无法加载程序集“WebGrease”。
版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.18045。

1
你们有没有人运气好至少将软件包恢复到旧版本? - Luke94
@Luke94:是的,我做了。按照Hubo的指示操作,它会恢复到1.3版本。 - LeftyX
我刚刚给WebGrease团队写了一封电子邮件告诉他们。与此同时,没有其他选择,只能回到旧版本。 - LeftyX
使用@MSRS的解决方案,成功让它工作了。 - Luke94
顺便说一下,版本1.3对我也不起作用。我遇到了类似的问题:https://dev59.com/smYr5IYBdhLWcg3w6eM3。现在他们发布了1.5版本,但我又遇到了“HRESULT异常:0x80131045”的问题。天哪! - angularrocks.com
显示剩余2条评论
5个回答

36

使用Package Manager Console强制卸载软件包

uninstall-package -f WebGrease

然后使用以下命令安装先前的版本1.3.0

install-package WebGrease -Version 1.3.0

打开Web.config文件,在runtime标签下替换以下依赖项

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />


我刚刚写下了相同的解决方案 :-) 我和你唯一不同的是,在重新安装WebGrease之前,我删除了依赖程序集条目。 - Luke94
3
你的回答今天救了我的大事! - user1625066
根据您的部署机制,WebGrease.dll的1.3.0版本可能不会覆盖1.5.1版本。如果您使用了此答案进行部署,但仍然出现故障,请注意此问题。 - danmiser
我建议不要使用旧版的WebGrease。这个解决方案可能已经不再适用了。只需像dunken的答案中所示更改dependentassembly即可在使用当前webgrease时完成操作。 - Jan Bühler

8

我必须在web.config文件中添加以下代码:

    <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>
...

这是我的问题,因为我们的 web.configs 没有被检入源代码中,因为它们是与环境相关并针对每个部署环境进行编译的。我们使用 web.config.tmpl 文件,这些文件是由环境变量模板化的。 - blockloop

5

我遇到了同样的错误。这是因为Nuget更新了WebGrease dll,但没有更新web.config文件(使用的dll的特定版本)。

所以我在我的web.config文件中更改了下一行:

 <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />

to

<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />

我从dll属性中获取了版本号(1.6.5135.21930)。

获取后一切正常运行。


1
+1. 这样开始将词汇联想“垃圾”种入一个本来很棒的“Nuget”更新中... - EdSF

3

我们已经意识到程序集的强名称签名存在错误,因此我们正在积极努力尽快发布更新版本。目前,我们已将WebGrease 1.5.1包从nuget.org中取消列出。


有些东西在拉取那个旧版本。执行 'uninstall-package -f WebGrease' 然后 'install-package WebGrease' 安装了一个更新的版本,更新了 web.config,一切都正常工作了。 - Steven

0
请尝试以下方法:检查上述dll文件是否在GAC中。如果是,请在您的自定义应用程序bin文件夹中检查上述dll文件是否存在,如果存在,则从引用中删除它们。

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