在Mvc4中的_Layout.cshtml中调用Styles.Render时出现WebGrease错误

时间:2012-12-27 15:56:29

标签: css asp.net-mvc-4 bundle webgrease

我正在尝试将捆绑添加到我的Mvc4 Web项目中。我采取的步骤:

  1. System.Web.Optimization
  2. 添加了对我的项目的引用
  3. @Styles.Render("~/Content/css")
  4. <head>内添加了_Layout.cshtml
  5. BundleConfig.RegisterBundles(BundleTable.Bundles);添加到Global.asax.cs
  6. BundleConfig.cs方法
  7. 中将App_Start添加到bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));RegisterBundles(...)文件夹中
  8. 在我的site.css文件夹中添加了一个简单的Content
  9. 我从上面第2步开始的错误是Could not load file or assembly 'WebGrease, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

    enter image description here

    我错过了DLL引用或什么?请注意,我最初是从一个空白的Mvc4项目开始的。

2 个答案:

答案 0 :(得分:7)

在过去一天左右我也遇到了这个问题,但我想出了一个解决方案。基本上你需要更新“webgrease”。

以下是我更新webgrease所做的工作:

  1. 右键单击解决方案资源管理器中的项目解决方案。
  2. 点击“管理解决方案的NuGet包”
  3. 转到左侧的更新部分
  4. 搜索“WebGrease”
  5. 然后更新“WebGrease”
  6. 当我构建我的解决方案时,这对我有用。

答案 1 :(得分:0)

将ASP.NET MVC 5添加到运行WebForms的旧ASP.NET Web应用程序后,我遇到了同样的问题。我想添加新功能并在MVC平台上构建它们,因此使MVC和传统Web应用程序并排运行非常重要。我在这里写这个答案是因为我在stackoverflow和其他地方找到的所有解决方案,包括针对您现在正在阅读的主题选择的解决方案,都没有帮助我。也许我的发现会帮助那里的某人...

当我将MVC 5添加到Web应用程序项目中时,它安装了一堆引用,例如System.Web.Mvc,System.Web.Razor等。名为Microsoft.AspNet.Web.Optimization的NuGet包也已安装,其中引用了WebGrease;您和我的参考文献有问题。

在我的Web项目中安装的Optimization dll的版本是Microsoft.AspNet.Web.Optimization 1.1.3,它是目前的最新版本。 WebGrease版本1.5.2随带。

有趣的是,当我在_Layout.cs中执行@ Styles.Render(“〜/ Content / css”)语句时收到错误消息,请参阅WebGrease版本1.5.1。我不知道它从何处获得1.5.1版本,因为1.5.2已安装在我的Web项目中。我尝试卸载WebGrease并重新安装,尝试将WebGrease升级到最新版本(1.6.5135)。我确定这些dll没有安装在GAC中(没有安装)。我删除了“ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \”中的所有临时文件,但无济于事。

运行Web应用程序时,我使用了名为Fuslogvw.exe的程序记录所有绑定信息,希望我能找到一个逻辑原因,说明为什么我的应用程序坚持尝试加载旧的,不存在的旧版本。运行我的应用程序时使用WebGrease。有趣的是,日志的输出向我显示了应用程序在做什么,但不幸的是没有告诉我原因。该日志告诉我,尽管我已将Microsoft.AspNet.Web.Optimization版本1.1.3与WebGrease版本1.5.2一起安装,但它仍尝试加载Microsoft.AspNet.Web.Optimization版本1.1.0.0,该版本也包含较旧的版本WebGrease。为什么这样做呢?我不知道,因为我以前从未将优化添加到PC上的任何项目中。

我的解决方案是同时删除Microsoft.AspNet.Web.Optimization和WebGrease,然后在程序包管理器控制台中运行以下命令来安装Microsoft.AspNet.Web.Optimization版本1.1.0:

Install-Package Microsoft.AspNet.Web.Optimization -Version 1.1.0

这导致安装了WebGrease版本1.3.0,在加载使用_Layout.cshtml页面的MVC剃刀视图时,这不会引起任何问题。

对于那些感兴趣的人:在下面您可以看到Fuslogvw.exe生成的日志的输出,其中清楚地表明它试图加载不存在的Optimization 1.1.0版本:

*** Assembly Binder Log Entry  (26.11.2018 @ 13:19:59) ***

The operation failed.
Bind result: hr = 0x80131040. No description available.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///C:/Projects/MyProject/Web/
LOG: Initial PrivatePath = C:\Projects\MyProject\Web\bin
LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\myproject\1db399c5
LOG: Cache Base = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\myproject\1db399c5
LOG: AppName = 3f7f1cb1
Calling assembly : System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\MyProject\Web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/ipmvcang/1db399c5/3f7f1cb1/WebGrease.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/ipmvcang/1db399c5/3f7f1cb1/WebGrease/WebGrease.DLL.
LOG: Attempting download of new URL file:///C:/Projects/MyProject/Web/bin/WebGrease.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Projcets\MyProject\Web\bin\WebGrease.dll
LOG: Entering download cache setup phase.
LOG: Assembly Name is: WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Setup failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.