标签: asp.net-optimization

为什么MVC4捆绑捆绑Knockout.js?

我已经下载了MVC4并试图弄清楚捆绑功能在标准项目中的工作原理.似乎有捆绑:

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>
Run Code Online (Sandbox Code Playgroud)

返回所有jquery.js文件,但不包括所包含脚本中的knockout.js文件.为什么是这样?还有什么是_references.js文件,为什么knockout.js文件被注释掉了?

asp.net-mvc asp.net-mvc-4 asp.net-optimization

6
推荐指数
1
解决办法
4638
查看次数

尝试创建新的Bundle时,NoTransform无效

我正在关注一个示例,并且在为MVC项目创建自定义包时无法使"NoTransform"工作.这是我的代码无法编译,因为"NoTransform"产生一个错误,上面写着"错误1无法找到类型或命名空间名称'NoTransform'(你是否缺少using指令或程序集引用?)" .有什么想法吗?

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.WebPages;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace CoyleAzure
{


    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);


            // Added to Add DisplayModes


            DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Phone")
            {
                ContextCondition = (context => (
                (context.GetOverriddenUserAgent() != null) &&
                (
                (context.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) ||
                (context.GetOverriddenUserAgent().IndexOf("iPod", StringComparison.OrdinalIgnoreCase) >= 0) ||
                    (context.GetOverriddenUserAgent().IndexOf("Droid", StringComparison.OrdinalIgnoreCase) >= 0) ||
                        (context.GetOverriddenUserAgent().IndexOf("Blackberry", StringComparison.OrdinalIgnoreCase) >= 0) …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc bundle asp.net-optimization

6
推荐指数
3
解决办法
5054
查看次数

为什么在我的ASP MVC4应用程序中重定向资源捆绑?

我正在使用RC,我已经通过NuGet查看了所有内容都是最新的.在我的global.asax.cs中我得到了:

BundleTable.Bundles.AddDefaultFileExtensionReplacements();
BundleTable.Bundles.AddDefaultIgnorePatterns();
BundleTable.Bundles.AddDefaultFileOrderings();

Bundle scripts = new Bundle("~/Scripts");
scripts.IncludeDirectory("~/Scripts", "*.js");
BundleTable.Bundles.Add(scripts);

Bundle css = new Bundle("~/Content/css");
css.IncludeDirectory("~/Content/css", "*.css", false);
BundleTable.Bundles.Add(css);
Run Code Online (Sandbox Code Playgroud)

我尝试了一些不同的配置而没有任何改进.

然后在我的布局中我得到了:

<link href="@BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" />
<script src="@BundleTable.Bundles.ResolveBundleUrl("~/Scripts")"> </script>
Run Code Online (Sandbox Code Playgroud)

当页面加载它看起来很体面的网址时:

<link href="/Content/css?v=QAsFYXHCbnaU70oGVxpgi9py9iKQrT9C4BVNdHa7xoI1" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

但该网址重定向到:

/Content/css/
Run Code Online (Sandbox Code Playgroud)

返回404找不到错误...

捆绑重定向...

有人有任何想法吗?

asp.net-mvc resourcebundle asp.net-mvc-4 asp.net-optimization

6
推荐指数
2
解决办法
2023
查看次数

BundleTable.Bundles.RegisterTemplateBundles

我有用VS2010创建的MVC4 RC项目.我不确定发生了什么,突然间我开始收到以下错误:

错误1"System.Web.Optimization.BundleCollection"不包含关于"RegisterTemplateBundles"的定义和没有扩展方法"RegisterTemplateBundles"接受类型"System.Web.Optimization.BundleCollection"的第一个参数可以找到(是否缺少使用指令或汇编引用?)C:\ xxxx\xxxx\Global.asax.cs 40 33 xxxx

错误来自Application_Start():

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            BundleTable.Bundles.RegisterTemplateBundles();

        }
Run Code Online (Sandbox Code Playgroud)

我在Global.asax.cs文件中使用以下语句:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗????

visual-studio-2010 asp.net-mvc-4 asp.net-optimization

6
推荐指数
1
解决办法
5117
查看次数

MVC4捆绑通配符 - *与{版本}

我理解并完全理解新的bundle通配符{version}正则表达式,因为即使在更新后它也会继续拾取你的脚本和样式库.问题是我无法让它有效地工作.

我之前使用以下表示法来获取我的jQuery脚本:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-1.*"));
Run Code Online (Sandbox Code Playgroud)

它会拾取与星号通配符匹配的所有文件.

但是,当我尝试以下内容时:

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));
Run Code Online (Sandbox Code Playgroud)

我注意到jQuery文件没有写到_Layout.cshtml页面.

注意 - 我确实在两个示例中使用以下HTML代码:

@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)

当我使用上面的第一个例子("*")表示法时,会将以下内容写入页面:

<script src="/Scripts/jquery-1.7.2.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用"{version}"表示法时,只有一个空的空间,应该写入库.这适用于jquery文件以及相关的CSS样式表.

无论我是在编译DEBUG还是RELEASE模式都没关系.结果是一样的.显然在发布模式下,我会在使用"*"表示法时获得优化版本:

<script src="/bundles/jquery?v=VUv2YOeuOgHad-FHZ-vGMDu9wN1j9VZGifI1SBUUSMs1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

因此,作为所有开发人员的完美主义者,我非常希望看到{version}符号对我有用,因为我确实了解新版本并希望对我的部署进行此控制.

非常感谢任何洞察我可能做错的事情.

提前谢谢,丹

asp.net-mvc bundling-and-minification asp.net-optimization

6
推荐指数
1
解决办法
5133
查看次数

ASP.NET捆绑 - 默认虚拟路径?

据我可以告诉(因为坦率地说文档上System.Web.Optimization非常稀少),捆绑在ASP.NET的工作方式是,你注册一组文件(JavaScript或CSS,相应的ScriptBundleStyleBundle),并将它们与虚拟路径关联; 例如,~/bundles/jqueryui对于所有jQuery UI脚本.稍后,当您在非调试模式下运行时,ASP.NET可以缩小这些文件,并且缩小版本将在您为该包指定的虚拟路径上可用.

默认的bundle setup将一些脚本包注册~/bundles/...为虚拟路径,将一些CSS注册~/Content/css为虚拟路径.我的问题是,这不一致吗?那岂不是更有意义,有一些像~/bundles/js/...~/bundles/css/...?实际上,该~/Content目录实际上是作为真实目录存在的,因此甚至存在名称冲突的可能性.我原以为你希望你的虚拟包路径是默认情况下存在的目录,并不打算在实际的文件系统上创建.是否有一些原因~/Content/css用于我不理解的CSS捆绑虚拟路径?

asp.net bundle web-optimization asp.net-optimization

6
推荐指数
1
解决办法
1898
查看次数

在system.web.optimization中自定义缓存清除

在优化开启时从包中呈现样式时,您可以获得:

<link href="/Content/themes/base/css?v=UM624qf1uFt8dYtiIV9PCmYhsyeewBIwY4Ob0i8OdW81" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,Android浏览器似乎没有加载带有查询字符串的URL.有没有办法在System.Web.Optimization中自定义此字符串?


编辑:

我的问题得到解答,我试图检测用户代理字符串上的android,并用一个查询字符串替换样式表.显然,我有问题,是不是因为查询字符串,它是精缩是造成它不能完全加载样式表在Android股票浏览器中的web字体的CSS版本.

Android股票浏览器无法加载带有转义反斜杠的css内容字符串,这是ASP.NET缩小器的一种解决方法,它会错误地缩小相同的css内容字符串.我最终将图标字体css样式放在它自己的"手工缩小"样式表上.

asp.net-mvc asp.net-optimization system.web.optimization

6
推荐指数
2
解决办法
2381
查看次数

在WebForms中调试时关闭捆绑/缩小

我希望能够在生产环境中缩小/捆绑我的javascript文件,同时在本地调试时让它们不受限制/非捆绑; 但是,VS2012中的默认WebForms站点似乎不允许它.

重现我的问题的步骤:

  1. 创建一个新的"ASP.NET Web窗体应用程序"(在我的例子中为c#)
  2. 启动时无需调试并在浏览器中查看资源
  3. 注意unminified的jQuery/Modernizr的文件,但捆绑/精缩MsAjaxJSWebFormsJs

web.config,默认情况下有:

<compilation debug="true" targetFramework="4.5">
Run Code Online (Sandbox Code Playgroud)

我甚至尝试通过明确告诉BundleTable不要优化来修改Global.asax :

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    BundleTable.EnableOptimizations = false;
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterOpenAuth();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)

然而,我仍然得到不可判断的javascript文件:

Chrome开发工具(显示缩小/捆绑文件)

这个站点(我意识到它是用于MVC)告诉我,无论是debug="true"在web.config还是BundleTable.EnableOptimizations = false;在Global.asax中,都应关闭该功能.而这个网站,(这对WebForms和从第一个链接),并没有提到将其关闭进行调试.

我怎么能(干净地)告诉我的项目只在debug ="false"时缩小/捆绑?

(我正在使用ASP.NET 4.5)

编辑:
这个问题这个问题是相似的,但他们都只提供使用的解决方案Scripts.Render().有没有办法用模板化的ScriptManager方法完成这个?

asp.net bundle webforms minify asp.net-optimization

6
推荐指数
1
解决办法
7173
查看次数

System.Web.Optimization使函数参数名对于某些函数保持不变

使用ASP.NET捆绑ScriptBundle

function StartController($scope, $location, $rootScope) {}
Run Code Online (Sandbox Code Playgroud)

变成了

function StartController(n,t,i) {}
Run Code Online (Sandbox Code Playgroud)

但是,由于我使用的是AngularJs,因为依赖注入仍然有效,因此在缩小时不得更改参数名称.我怎样才能确保$ scope,$ location和$ rootScope通过ScriptBundle保持这些名称的缩小,但是允许在其他地方重命名参数?

asp.net-mvc asp.net-optimization

5
推荐指数
1
解决办法
1802
查看次数

使用 System.Web.Optimizations 对特定包进行条件缩小

我在我的项目中使用 System.Web.Optimizations BundleConfig。我在网站上使用的特定 jQuery 插件遇到了问题。如果我将文件添加到我的 ScriptBundle 中,它在调试模式下工作正常,但在发布模式下抛出 JavaScript 错误(即设置 Web.config debug=false)。我认为有些东西没有被正确缩小。

所有其他脚本都没有给我带来任何问题,因此我不想影响所有捆绑包的行为,但有没有一种方法可以针对特定捆绑包进行自定义,以告诉它在调试中使用特定版本并在发布中使用最低版本。

我知道它的默认行为是查找 .min 文件,但我似乎无法让它工作。谁能告诉我这里可能缺少什么?感谢您的帮助。

这是我自己拆分的例子。这在调试中有效,但当我在 web.config 中设置 debug=false 时无效

ScriptBundle layoutBundle = new ScriptBundle("~/jsbundles/jquery/layout"); 
layoutBundle.Include("~/Scripts/plugins/jquery.layout-latest.js"); 
bundles.Add(layoutBundle); 
Run Code Online (Sandbox Code Playgroud)

asp.net-optimization

5
推荐指数
1
解决办法
932
查看次数