如何为 MVC-3-converted-to-4 应用添加对 System.Web.Optimization 的引用

How to add reference to System.Web.Optimization for MVC-3-converted-to-4 app

提问人:Ian Davis 提问时间:2/28/2012 最后编辑:TylerHIan Davis 更新时间:11/7/2019 访问量:405326

问:

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

当我这样做时,我得到红色的波浪线,上面写着:“你是否缺少一个程序集引用?当我尝试添加引用,然后单击对话框中的 .NET 选项卡,从 AZ 排序时,我没有看到 .System.Web.Optimization

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

命名空间 asp.net-optimization

评论

7赞 Myzifer 6/20/2013
我已经有优化了,但它导致 ScriptBundle 出现问题,我只能在卸载 Opti 后解决......然后重新安装它。
2赞 Snekse 4/30/2014
@Myzifer 您应该提交您的评论作为答案。这是唯一对我有用的东西,可以将节点放回我的引用中。System.Web.Optimization
2赞 raddevus 7/20/2015
@myzifer 对于这种奇怪的行为,你的答案是正确的。唯一能为我解决这个问题的是运行 nuget cmd 行:UnInstall-Package Microsoft.AspNet.Web.Optimization,然后立即运行安装:Install-Package Microsoft.AspNet.Web.Optimization。试图用VStudio 2013在我的家用计算机上让它工作数周,但从未得到它。非常感谢。
0赞 Percy 11/26/2015
@Myzifer - 也为我工作 - 从 VSOnline “签出”一个项目并出现此错误 - 卸载然后重新安装 - 20 秒工作 - 谢谢 - 这是您很容易失去一天的愚蠢问题之一!

答:

83赞 Zephyr was a Friend of Mine 3/5/2012 #1

在 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”命名空间添加到“Views”web.config 中:

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
    
  • 在 view.cshtml 中,将包含添加到在上一步中创建的捆绑包中:In your view.cshtml add an include to the bundle created in the last step:

    @Scripts.Render("~/MyBundle")
    

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

评论

0赞 Luke Belbina 3/27/2012
没错,这个版本包括它。另一个版本没有。
1赞 Misbit 8/22/2014
我不明白为什么这对我不起作用。我已经尝试过这种方式并在 BundleConfig 中创建捆绑包.cs但是当我在我的视图中添加 @Styles.Render(“~/CssBundle”) 时,我得到的只是 <link href=“/CssBundle” rel=“stylesheet”/> 它给了我 404。知道为什么吗?
0赞 vapcguy 8/29/2018
@vsdev我知道这已经晚了 4 年,但您可能需要检查您的 BundleConfig.cs以确保您正确添加它 - 此答案中的行仅引用文件。在里面,你应该能够做一些事情,它会抓取你文件夹中的所有CSS文件。您不希望像 CSS 文件示例中那样。".js"public static void RegisterBundles(BundleCollection bundles) { ... }bundles.Add(new StyleBundle("~/CssBundle"));CssBundleScriptBundle
738赞 mhu 6/11/2012 #2

更新
版本 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 the package from 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 中的 Application_Start() 调用 RegisterBundles() 函数.cs:

    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赞 FloatLeft 6/11/2012
你需要MVC4来使用它吗?
5赞 mhu 9/28/2012
它并没有过时。这就是我在 Visual Studio 2012 和 ASP.NET (MVC) 4 的最终版本中使用它的方式。
29赞 davidpricedev 11/16/2012
你的回答包括“使用 System.Web.Optimization;”,这正是提问者要问的问题。
10赞 mhu 12/19/2012
@dave:这是好事还是坏事?要解决“缺少程序集引用”的问题,应按照答案中所述安装 Microsoft.AspNet.Web.Optimization。
6赞 Wachburn 7/11/2013
在默认的 MVC 模板中,我可以使用 Scripts 类,而无需在页面顶部添加 System.Web.Optimization 命名空间。但是在我的预测中,我收到错误“名称脚本不存在”。我该如何解决这个问题?在 web.config 中添加此命名空间没有帮助。编辑:重新加载解决方案有帮助,对不起:)
14赞 amine 11/14/2012 #3

就我而言,这是一个 tfs 问题,因为 tfs 排除了二进制文件,因此 Nugget PM 会找到已安装的 nugget 并且不更新库 如果您有类似的问题:

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

注意:包文件夹与 yousolution.sln 文件处于同一级别

2赞 zenichi 5/29/2013 #4

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

BundleTable.EnableOptimizations = **true**;

DEBUG 模式下启用缩小并更改为 false,以单独呈现所有脚本和样式文件。

评论

6赞 mhu 6/14/2013
通过 web.config 更容易控制这一点。如果设置了(这在构建调试版本时非常标准),则不会进行优化。通常,此设置会在发布版本中自动删除。 应仅用于否决 web.config。有关详细信息,请访问:asp.net/mvc/tutorials/mvc-4/bundling-and-minification(搜索“控制捆绑和缩小”)<compilation debug="true" />BundleTable.EnableOptimizations
0赞 siva.k 3/18/2014
这对我帮助很大,谢谢。我不得不禁用它,因为使用 dotless + RequestReduce 会使捆绑包变得乱七八糟。
0赞 vapcguy 8/31/2018
此设置实际上取决于您是在捆绑包中使用预缩小的文件,还是使用非缩小的文件 - 如果您处于调试或发布状态,则不会太多,除了每种模式的最佳实践 - 例如,您可以在调试模式下编译一个项目,但是在 BundleConfig .cs 中, 您正在指定所有预缩小的文件,并且不希望它对它们进行另一次最小化。BundleTable.EnableOptimizations = false;
0赞 vapcguy 8/31/2018
只有当某人在其 BundleConfig.cs 中使用非预最小化文件(即没有 .min 的文件)时,这才是问题的答案。如果他们使用 .min 文件并将其设置为 true,则会出现问题。
6赞 Mian 7/16/2013 #5

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

这将打开 conslve,粘贴

Install-Package Microsoft.AspNet.Web.Optimization 

并输入。你就完成了

12赞 Myzifer 5/7/2014 #6

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

卸载包 Microsoft.AspNet.Web.Optimization

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

安装包 Microsoft.AspNet.Web.Optimization

可以为您解决这个问题。

评论

1赞 TylerD87 9/4/2015
不确定这如何回答问题?
0赞 Myzifer 9/4/2015
@TylerD87很简单,它解决了一组特定的情况,我不是唯一一个发现这种情况的人,如果你阅读了关于这个问题的评论,你会注意到 Snekse 在 Apr 29 '14 在 16:39 说他们需要遵循我给出的特定说明,并且下面其他人在很久以后发布了大致相同的内容并被点赞。
0赞 TylerD87 9/4/2015
也许编辑你的答案,让它看起来更像一个答案?我什至没有意识到你在回答这个问题或你的建议。
0赞 Myzifer 9/4/2015
@TylerD87 这个问题是关于优化的,我的答案是关于优化的,它解决了问题中详述的问题,并且至少得到了其他 2 人的认可,如果您能提供详细信息,说明您是如何误解我的答案的,以及我如何最好地改变/修改它以向更广泛的受众提供更清晰的答案,那么我很乐意进行这样的更改,但如果没有建设性的批评,我无法确定如何我可能会有所改善。
0赞 TylerD87 9/4/2015
嗨,我建议进行编辑,使其更清楚地了解我所指的是什么。在阅读了顶部的评论后,我发现这实际上是有效的建议,但是您的答案的呈现方式不清楚您的实际建议。
17赞 M. Salah 1/23/2015 #7

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

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