我正在使用我的ASP.NET MVC 3 Web应用程序中的新ASP.NET捆绑功能(使用System.Web.Optmization 1.0.0-beta预发行版).
效果很好.
但是,我们有一些存储在数据库中的动态 CSS/JS.
我希望将这个添加到我的核心包的单独包中,比如说"DynamicBundle".我知道怎么做,不是问题.
现在我的问题是,当在数据库中更改此CSS/JS时,需要"刷新"该捆绑包,以便将这些文件的内容重新读入捆绑包.
基本上,我需要ASP.NET重新生成附加到包URL的魔术guid /字符串.
理想情况下,我只想刷新特定的包,而不是整个包表.
有没有办法做到这一点?
编辑:
好的第二个问题,无法弄清楚如何将动态CSS/JS添加到捆绑包中.bundle.AddFile获取文件的虚拟路径,但它不是物理文件,而是字符串.我怎么会这样做?当然我不必先写出字符串到文件?
编辑2: 所以我决定不捆绑我的动态内容.有两个原因:
所以我所做的是在运行时手动缩小我的动态css/js(一次,然后缓存).这样我只需清除缓存就可以轻松刷新它.
话虽这么说,这仍然是一个相关的问题(刷新包)所以我会把它打开..
asp.net asp.net-mvc bundle dynamic-content asp.net-optimization
我一直在尝试ASP.NET MVC 4中新的缩小和捆绑功能,只要你使用css和js文件的默认文件夹约定,它就会很好用.
/Content
/Scripts
Run Code Online (Sandbox Code Playgroud)
我通常把css和脚本放在一个名为Static的文件夹中
/Static/Css
/Static/Js
Run Code Online (Sandbox Code Playgroud)
我试着像这样注册我自己的包:
public static class BundleCollectionExtensions
{
public static void RegisterScriptsAndCss(this BundleCollection bundles)
{
var bootstrapCss = new Bundle("~/Static/Css", new CssMinify());
bootstrapCss.AddDirectory("~/Static/Css", "*.css");
bootstrapCss.AddFile("~/Static/Css/MvcValidation.css");
bootstrapCss.AddFile("~/Static/Css/bootstrap-responsive.min.css");
bootstrapCss.AddFile("~/Static/Css/bootstrap.min.css");
bundles.Add(bootstrapCss);
var bootstrapJs = new Bundle("~/Static/Js", new JsMinify());
bootstrapJs.AddDirectory("~/Static/Js", "*.js");
bootstrapJs.AddFile("~/Static/Js/jquery-1.7.1.min.js");
bootstrapJs.AddFile("~/Static/Js/jquery.validate.min.js");
bootstrapJs.AddFile("~/Static/Js/jquery.validate.unobtrusive.min.js");
bootstrapJs.AddFile("~/Static/Js/bootstrap.min.js");
bootstrapJs.AddFile("~/Static/Js/gunsforhire.js");
bundles.Add(bootstrapJs);
}
}
Run Code Online (Sandbox Code Playgroud)
并在
Global.ascx.cs
Run Code Online (Sandbox Code Playgroud)
我这样做了:
BundleTable.Bundles.RegisterScriptsAndCss();
Run Code Online (Sandbox Code Playgroud)
生成的标记如下所示:
<link href="/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" rel="stylesheet" type="text/css" />
<script src="/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,请求看起来像这样:
Request URL:http://localhost:49603/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request Method:GET
Status Code:301 Moved Permanently (from cache)
Query String Parametersview URL encoded …Run Code Online (Sandbox Code Playgroud) 使用这些说明手动将ASP.NET MVC项目升级到MVC4后,如何在MVC4中设置ASP.NET Web优化框架的新CSS和JavaScript资产捆绑和最小化功能?默认模板已全部设置,但您如何手动完成?
asp.net asp.net-mvc asp.net-mvc-4 bundling-and-minification asp.net-optimization
我有一个在Visual Studio 2012上运行的MVC 3/.NET 4.0应用程序.
我刚为我的所有JS和CSS文件创建了一个静态包.
它首先squawked我使用的路径没有"〜/"开头,但我需要包括在我的服务器上的另一个虚拟目录中的文件,所以我用/../得到它们.
我的包看起来像这样:
Bundle css = new Bundle("~/MyCSS", typeof(CssMinify));
css.AddFile("~/Content/css/Site.min.css");
css.AddFile("~/../CommonWeb/css/fontawesome/css/font-awesome.css");
BundleTable.Bundles.Add(css);
Run Code Online (Sandbox Code Playgroud)
我正在尝试包含字体 - 真棒.它找到了CSS文件就好了,但没有一个字体和图标进来.我猜它是这样的行会导致问题:
src: url('../font/fontawesome-webfont.eot'); /* From Font-Awesome */
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何想法?谢谢!
编辑:更多信息:
在查看相对CSS路径的请求时,它会在我的服务器的根目录之后:
http://localhost/font/fontawesome-webfont.woff
Run Code Online (Sandbox Code Playgroud)
代替
http://localhost/CommonWeb/css/fontawesome/font/fontawesome-webfont.woff
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MVC4的新"捆绑和缩小".
对于IE条件注释,我仍然采用旧方法:<!--[if lt IE 9]><link href=.../><![endif]-->或者<!--[if lt IE 9]>@Styles.Render("~/foo")<![endif]-->我似乎没有得到自动调试/释放处理.
有没有内置的方法来做到这一点?其他人如何做到这一点?
编辑:
能够<noscript>在渲染输出中包含标签(用于回退)也很棒.
asp.net-mvc conditional-comments asp.net-mvc-4 bundling-and-minification asp.net-optimization
使用最新版本的MVC4,当它包含保留字作为键名时,我无法缩小javascript!
请参阅下面的错误,其中包含应该缩小的有效javascript.
有谁知道如何修复这个短的重写javascript使用[""]表示法?
PS有问题的代码是几千行,所以它不是一个选项!
/* Minification failed. Returning unminified contents.
(3,9-15): run-time warning JS1010: Expected identifier: delete
(4,9-13): run-time warning JS1010: Expected identifier: case
(5,9-11): run-time warning JS1010: Expected identifier: if
(3,9-15): run-time error JS1137: 'delete' is a new reserved word and should not be used as an identifier: delete
(4,9-13): run-time error JS1137: 'case' is a new reserved word and should not be used as an identifier: case
(5,9-11): run-time error JS1137: 'if' is a new reserved word and …Run Code Online (Sandbox Code Playgroud) javascript asp.net-mvc-4 bundling-and-minification asp.net-optimization
对于每个控制器都有一个文件夹(具有相同名称的控制器),并为每个操作一个脚本文件.

对于每个文件,都按照模式创建一个包:"〜/ Scripts/Controllers/{controller-name}/{filename-without-extension}"
bundles.IncludePerFile(new DirectoryInfo(server.MapPath("~/Scripts/Controllers")), "~/Scripts/Controllers/{0}/{1}",
(dir,file) => string.Format("~/Scripts/Controllers/{0}/{1}", dir, Path.GetFileNameWithoutExtension(file)), "*.js");
Run Code Online (Sandbox Code Playgroud)
IncludePerFile 是我为执行此任务而创建的扩展方法
然后一个捆绑:~/Scripts/Controllers/processos/pasta应该存在!
并确认这一点:

到目前为止如此正确!捆绑存在!
当我运行该应用程序时,会发生以下错误:

如果我改变了这个:
@Scripts.Render("~/Scripts/Controllers/processos/pasta")
Run Code Online (Sandbox Code Playgroud)
对此:
@Scripts.Render("~/Scripts/Controllers/processos/pasta.js")
Run Code Online (Sandbox Code Playgroud)
没有生成错误.但是文件没有缩小,因为实际上有一个捆绑.(我已经放入了发布模式并发布了应用程序!)
Index was outside the bounds of the array.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IndexOutOfRangeException: Index was outside the bounds of the array. …Run Code Online (Sandbox Code Playgroud) 我试图使用Microsoft Web Optimization框架将大量的.js文件连接成一个文件.一切正常,但在这些文件中,我有几个已经缩小和丑化,并且不需要再次处理它们.
例如,我有recaptcha_ajax.js文件,并在附加时导致以下错误:
/* Minification failed. Returning unminified contents.
(715,29-36): run-time error JS1019: Can't have 'break' outside of loop: break t
(714,293-300): run-time error JS1019: Can't have 'break' outside of loop: break t
(678,210-217): run-time error JS1019: Can't have 'break' outside of loop: break t
(671,1367-1374): run-time error JS1019: Can't have 'break' outside of loop: break t
(665,280-287): run-time error JS1019: Can't have 'break' outside of loop: break t
*/
Run Code Online (Sandbox Code Playgroud)
我试图从包中取出recaptcha_ajax.js并直接引用它,但随后弹出其他错误 - 所以,我需要在特定位置的bundle中的那个文件.
我只需要能够说 - 不要缩小和uglify recaptcha_ajax.js …
在捆绑和缩小中,我已经知道捆绑器将移动某些已知的文件类型 - 因此像jQuery这样的东西将被移到前面.
默认情况下,当ASP.NET捆绑文件时,它们首先按字母顺序排序,就像它们在解决方案资源管理器中显示一样.然后它们会自动移动,以便在其他任何内容之前加载已知的库及其自定义扩展(如jQuery,MooTools和Dojo). -资源
但在阅读了最近的这个问题之后:ASP.NET MVC - Bundle Config命令,它显示了即使用户指定了加载顺序,文件如何被捆绑器移动,我意识到我不知道这些已知文件类型是什么,或者他们将被列入的订单.
我从来没有见过一个解释这个的清单,在搜索中,我什么也没想到.
是否有一个列表显示已知文件类型是什么以及它们将被呈现的顺序?我认为这是ASP.NET团队应该为开发人员提供资源的东西.
asp.net asp.net-mvc bundling-and-minification asp.net-optimization
我正在使用新的System.Web.Optimization并创建了一个这样的包:
bundles.Add(New ScriptBundle("~/bundles/BaseJS").Include(
"~/Resources/Core/Javascripts/jquery-1.7.1.js",
"~/Resources/Core/Javascripts/jquery-ui-1.8.16.js",
"~/Resources/Core/Javascripts/jquery.validate.js",
"~/Resources/Core/Javascripts/jquery.validate.unobtrusive.js",
"~/Resources/Core/Javascripts/jquery.unobtrusive-ajax.js"))
Run Code Online (Sandbox Code Playgroud)
在我看来,我添加了这个
@System.Web.Optimization.Scripts.Render("~/bundles/BaseJS")
Run Code Online (Sandbox Code Playgroud)
在fiddler中,URL会遇到未来1年的过期标头和文本/ javascript的内容类型
在web.config中,我有一些gzip的代码正在处理静态JS文件,但它似乎没有在缩小的bundle上.
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00"/>
<remove fileExtension=".js"/>
<mimeMap fileExtension=".js" mimeType="text/javascript"/>
</staticContent>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="text/javascript" enabled="true"/>
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="text/javascript" enabled="true"/>
</staticTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
有没有办法让渲染包gzip的内容?
asp.net-mvc-3 bundling-and-minification asp.net-optimization