44

升级WebGrease到版本1.3.0时出现错误:

无法加载文件或程序集“WebGrease,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

源错误:

Line 6:      <title>@ViewBag.Title</title>
Line 7:      @Styles.Render("~/Content/bundles/bootstrap")

如何解决此错误。

4

14 回答 14

64

这是对我有用的答案,它是上述一些答案的组合。首先安装/卸载/重新安装以下软件包:

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

然后复制 ~/Views/Shared/_Layout.cshtml 的内容,删除 _Layout.cshtml 文件,重新创建并将内容粘贴回去。

这是对我有用的最终修复。

于 2013-01-23T19:32:51.990 回答
17
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" /> </dependentAssembly>

将上面的代码更改Web.config为以下

<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0"/> </dependentAssembly>
于 2013-02-20T09:34:54.837 回答
4

看起来您参考了旧版(1.0.0.0?)程序集(假设当前版本是 1.3.0.0)。在这种情况下,您需要在 web.config 中进行程序集重定向,或者更好地重新编译您的二进制文件以使用最新版本。

另一种可能性,如果最新版本与旧版本(1.0.0.0)共享相同的程序集版本,您需要重新编译代码以使用正确的程序集并确保使用正确的副本(检查 GAC 是否有错误,使用fuslogv调查确切的文件导致错误)。

于 2012-11-29T05:29:57.597 回答
3

以下组合为我解决了这个问题。首先,在 Package Manager 命令行上运行以下命令(类似于 sec_goat 提供的答案,但不完全相同):

Uninstall-Package Microsoft.AspNet.Web.Optimization
Uninstall-Package WebGrease
Install-Package Microsoft.AspNet.Web.Optimization
Update-Package WebGrease

然后,与 Hriju 类似,我需要在 web.config 中更改这一行:

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

进入这个:

<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" />
于 2013-04-18T17:20:13.293 回答
3

我遇到过同样的问题。另一位开发人员升级了 WebGrease 包(以及其他包),但没有同步或签入某些内容。我编辑了包文件以删除对现有包的引用。然后我通过包管理器重新安装。最后,我更新了软件包。

如果 packages.config 文件与项目中的文件(包括正确的版本)不匹配,似乎不会安装或更新包。包管理器中没有错误,它只是无法更新或安装包。

于 2012-12-13T04:41:38.143 回答
2

对我有用的绑定重定向:

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

细微的差别是我没有在oldVersionattr 中包含这个版本(1.3.0.0)。

失败的蛋糕!

于 2013-04-23T18:51:15.060 回答
1

这是 Microsoft.AspNet.Web.Optimization 的问题(优化前进)。

您需要通过卸载 Optimize 并从 web.config 中删除任何 WebGrease 程序集重定向来降级 WebGrease。

然后重新安装 Optimize 并确保升级 WebGrease。

这是一个快速修复,但它让我的构建工作!

于 2013-01-09T17:09:40.317 回答
1

对于一个 Web API 项目,我正在研究真正有效的方法如下:

  1. 打开 NuGet 包管理器,点进去Installed packages然后卸载 Microsoft.AspNet.Web.Optimization。它提示它将删除WebGrease 1.1.0. 打Yes

  2. 现在重新安装它,单击 NuGet 的在线选项卡并搜索Microsoft.AspNet.Web.Optimization.

现在一切都按预期工作。

于 2013-05-31T14:19:17.197 回答
1

我有一个类似的问题,除了它不是错误而是警告。将 WebGrease 更新到 1.3.0 后,构建将警告源放在声明中。在确保我的 web.config 文件中具有适当的程序集重定向之后,我最终创建了一个新的 _Layout.cshtml 视图并使用与之前完全相同的剃刀标记(复制/粘贴)保存在旧文件上。之后,警告消失了。

我不确定警告的全部内容,但尝试将代码复制到文件中,将其粘贴到新文件中并覆盖原始文件。

如果有人对为什么这样做有任何见解,我会全神贯注。

于 2012-12-08T21:25:29.817 回答
0

为了解决这个问题,我所做的只是更新 package.config 文件(WEBMATRIX)

<packages>
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
  <package id="WebGrease" version="1.3.0" targetFramework="net40" />
</packages>

干杯!!!

于 2013-04-01T15:25:39.010 回答
0

就我而言,所有这些方法都不起作用。最后我通过包管理器卸载 Microsoft.AspNet.Web.Optimization 和 WebGrease 包来解决这个问题,然后我在记事本中打开我的项目文件(.csproj)并删除与这两个包相关的所有条目,结果是有问题。最后我再次通过包管理器安装这两个包并运行项目。现在所有工作都很好。

于 2014-03-17T13:48:54.700 回答
0

感谢@roadsunknown。在我的主机冻结后,我的配置被破坏,从而导致我的虚拟机无法正常关闭。为了解决这个问题,我通过 NuGet 卸载了 Microsoft.AspNet.Web.Optimization,然后不得不删除 packages.config 中对 WebGrease 的引用,最后通过 NuGet 重新安装了 Microsoft.AspNet.Web.Optimization。

于 2013-01-12T17:48:08.463 回答
0

与 Hriju 和 Nathan 相同(卸载、重新安装和更新),只是我没有省略该newVersion属性,而是保留了它。但是由于 WebGrease 从 1.1.0 直接升级到 1.3.0,因此不需要 1.2.0(就像 jenson-button-event 所拥有的那样)(祝西班牙 JB 好运,顺便说一句)。

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

迂腐?也许吧,但它总是在细节中,对吧?这为我修好了。

无论如何,这是希望他们在下一次更新中做对。

于 2013-04-24T05:38:52.740 回答
0

这就是我的运行时部分的样子,它可以工作

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.3.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>
于 2013-05-07T02:04:50.757 回答