如何为MVC-3转换为4应用程序添加对System.Web.Optimization的引用


458

我试图在最近从MVC 3转换为MVC 4 beta的项目中使用新的捆绑功能。它需要global.asax中的一行代码BundleTable.Bundles.RegisterTemplateBundles();,这using System.Web.Optimization;在顶部。

当我这样做时,我会看到红色的波浪线,表示“您是否缺少程序集引用?” 当我尝试添加参考,然后单击对话框中的.NET选项卡时,从AZ排序,我看不到System.Web.Optimization

如何将此引用添加到我的项目中?


6
我已经进行了优化,但是它导致了ScriptBundle的问题,我只能在卸载Opti之后才能解决...然后重新安装它。
Myzifer

1
@Myzifer您应该提交评论作为答案。这是使System.Web.Optimization节点重新回到我的参考中的唯一有效方法。
Snekse 2014年

2
@myzifer您的答案是对这种奇怪行为的正确答案。该对我来说运行的NuGet CMD线,将解决这个问题的事情:卸载,包装Microsoft.AspNet.Web.Optimization然后右键后运行安装:安装,包装Microsoft.AspNet.Web.Optimization。试图通过VStudio 2013将其在我的家用计算机上工作数周,并且永远无法获得它。非常感谢。
raddevus

@Myzifer-也为我工作-从VSOnline“签出”一个项目并出现此错误-卸载然后重新安装-20秒作业-谢谢-这是您很容易迷失一天的愚蠢问题之一!
2015年

Answers:


728

更新
版本1.1.x可用,请阅读发行说明:https : //www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Microsoft.Web.Optimization包现在已过时。对于ASP.NET(MVC)4和更高版本,您应该安装Microsoft ASP.NET Web优化框架:

  • nuget安装软件包:

    Install-Package Microsoft.AspNet.Web.Optimization
  • 在App_Start \ BundleConfig.cs中创建和配置捆绑包:

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/Scripts/jquery").Include(
                "~/Scripts/Lib/jquery/jquery-{version}.js",
                "~/Scripts/Lib/jquery/jquery.*",
                "~/Scripts/Lib/jquery/jquery-ui-{version}.js")
            );
    
            bundles.Add(new ScriptBundle("~/Scripts/knockout").Include(
                 "~/Scripts/Lib/knockout/knockout-{version}.js",
                 "~/Scripts/Lib/knockout/knockout-deferred-updates.js")
            );
        }
    }
  • 从global.asax.cs中的Application_Start()调用RegisterBundles()函数:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • 在您的view.cshtml中包括Optimization名称空间并呈现捆绑包:

    @using System.Web.Optimization
    
    @Scripts.Render("~/Scripts/jquery")
    @Scripts.Render("~/Scripts/knockout")

有关更多信息,请参见http://www.asp.net/mvc/overview/performance/bundling-and-minification


2
您需要MVC4才能使用它吗?
FloatLeft 2012年

5
它不是过时的。这就是我在Visual Studio 2012和ASP.NET(MVC)4的最终版本中使用它的方式
。– mhu

29
您的答案包括“使用System.Web.Optimization;”,这正是发问者要问的问题。
davidpriceev 2012年

9
@dave:是好是坏?要解决“缺少程序集参考”,应按照答案中的说明安装Microsoft.AspNet.Web.Optimization。
mhu 2012年

6
在默认的MVC模板中,我可以使用Scripts类,而无需在页面顶部添加System.Web.Optimization命名空间。但是在我的项目中,我收到错误消息“脚本名称不存在”。我该如何解决?在web.config中添加此名称空间无济于事。编辑:重新加载解决方案有帮助,对不起:)
Wachburn

83

在最终发布的ASP.Net MVC 4版本中,方法如下:

  • 通过nuget安装Microsoft.AspNet.Web.Optimization(因为该框架未安装)

    install-package Microsoft.AspNet.Web.Optimization
  • 在Global.asax Application_Start中创建捆绑包:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • 将“ System.Web.Optimization”命名空间添加到“视图” web.config中:

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • 在您的view.cshtml中,将包含项添加到在最后一步中创建的包中:

    @Scripts.Render("~/MyBundle")

在调试模式下,目录中的所有脚本文件将单独呈现。在发布模式下,它们将被捆绑并缩小。


正确,此版本包括它。其他版本则没有。
路加·贝尔比纳

1
我不明白为什么这对我不起作用。我已经尝试过这种方式并在BundleConfig.cs中创建捆绑包,但是当我在视图中添加@ Styles.Render(“〜/ CssBundle”)时,得到的只是<link href =“ / CssBundle” rel =“ stylesheet “ />,我得到404。为什么?
vsdev 2014年

@vsdev我知道这已经晚了4年,但是您可能必须检查BundleConfig.cs以确保正确添加它-此答案中的行仅引用".js"文件。在内部,public static void RegisterBundles(BundleCollection bundles) { ... }您应该能够执行类似的操作bundles.Add(new StyleBundle("~/CssBundle"));,它将抓取文件CssBundle夹中的所有CSS文件。您不想像ScriptBundleCSS文件示例中那样。
vapcguy

17

从nuget更新(重新安装)软件包,您可以使用以下命令:

update-Package Microsoft.AspNet.Web.Optimization -reinstall


14

在我的情况下,这是一个tfs问题,因为tfs排除了二进制文件,因此Nugget PM查找已安装的nugget,并且不更新库如果您遇到类似的问题:

  • 转到源代码管理
  • 导航到.. \ packages \ Microsoft.Web.Optimization
  • 添加lib文件夹(取消选中排除二进制扩展名)
  • 更新您的解决方案并从路径添加dll引用

注意:软件包文件夹位于yousolution.sln文件的同一级别中


11

使用nuget在程序包管理器控制台中卸载System.Web.Optimization,如下所示:

卸载打包Microsoft.AspNet.Web.Optimization

然后使用以下命令重新安装:

安装包Microsoft.AspNet.Web.Optimization

可以为您解决这个问题。


1
不确定如何回答这个问题?
TylerD87

@ TylerD87很简单,它可以解决一组特定的情况,我不是唯一一个发现这种情况的人,如果您阅读有关问题的评论,您会注意到Snekse在14年4月29日的16:39他们需要遵循我给的特定指示,而其他人在下面发布的内容大致相同,因此遭到了投票。
Myzifer

也许编辑您的答案,使其看起来更像一个答案?我什至没有意识到你在回答这个问题或你的建议。
TylerD87

@ TylerD87这个问题是关于优化的,我的回答是关于优化的,它解决了问题中详述的问题,并且至少有2个其他人承认了,如果您要提供有关您如何误解了我的答案以及如何做到最好的详细信息,我可以更改/修改它,以便为更广泛的受众提供更清晰的答案,然后我很乐意进行此类更改,但是如果没有建设性的批评,我将无法确定自己应该如何改进。
Myzifer

嗨,我建议进行修改,以使我所指的内容更清楚。阅读了顶部的评论后,我发现这实际上是行之有效的建议,但是给出答案的方式尚不清楚您的实际建议。
TylerD87

6

通过Visual Studio 从NUGet安装它打开Visual Studio 2010,选择“工具”->“库包管理器”->“包管理器控制台”

这将打开凹面,粘贴

Install-Package Microsoft.AspNet.Web.Optimization 

然后输入 你完成了


2

在Global.asax application_start中设置(在RELEASE模式下等):

BundleTable.EnableOptimizations = **true**;

启用最小化并在DEBUG模式下更改为false,以分别渲染所有脚本和样式文件。


5
通过web.config进行控制比较容易。如果<compilation debug="true" />设置了(在构建调试版本时这是非常标准的),则不会进行优化。通常,此设置会在发行版本中自动删除。BundleTable.EnableOptimizations应该仅用于否决web.config。有关更多信息:asp.net/mvc/tutorials/mvc-4/bundling-and-minification(搜索“控制捆绑和缩小”)
mhu 2013年

这对我有很大帮助,谢谢。我必须禁用它,因为与无点+ RequestReduce一起使用会使捆绑乱七八糟。
siva.k 2014年

此设置实际上取决于您是否在捆绑软件中使用了预先缩小的文件,或者是否使用了未缩小的文件-如果您是在Debug或Release中,则不那么重要,除了每种模式的最佳做法-例如。 ,您可以拥有一个在Debug模式下进行编译的项目,但是您拥有的位置BundleTable.EnableOptimizations = false;是因为在BundleConfig.cs中,您指定了所有预缩小的文件,并且您不希望它对它们进行另一个最小化。
vapcguy

如果某人在他们的BundleConfig.cs中使用了非预最小化的文件(即没有.min的文件),那么这实际上只能是解决某人问题的方法。如果他们使用.min文件并将其设置为true,则可能会出现问题。
vapcguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.