我正在使用新的ASP.NET捆绑功能,似乎无法让我的自定义订单工作.这是我的JS文件:
bootstrap.js
bootstrap.min.js
jquery-1.7.2.intellisense.js
jquery-1.7.2.js
jquery-1.7.2.min.js
jquery-ui-1.8.19.js
jquery-ui-1.8.19.min.js
jquery.unobtrusive-ajax.js
jquery.unobtrusive-ajax.min.js
Run Code Online (Sandbox Code Playgroud)
我想捆绑器在所有jQuery文件之前输出boostrap*.js.我理解在内部捆绑器会在顶部对jQuery文件进行排序,所以我试图覆盖逻辑但没有成功:
var bootstrapOrdering = new BundleFileSetOrdering("bootstrap");
bootstrapOrdering.Files.Add("bootstrap*.js");
bootstrapOrdering.Files.Add("jquery*.js");
BundleTable.Bundles.FileSetOrderList.Add(bootstrapOrdering);
Run Code Online (Sandbox Code Playgroud)
注意:如果可能的话,我更愿意使用通配符来覆盖所有情况而不指定代码中的所有文件.
有谁知道我可以申请定制订单?
谢谢
所以MVC 4引入了脚本和样式捆绑.这允许:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/mobile").Include(
"~/Scripts/jquery.mobile-*"));
Run Code Online (Sandbox Code Playgroud)
然后在这样的剃刀视图中使用:
@Scripts.Render("~/bundles/mobile")
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我要输入"~/bundles/mobile"?是否有办法让intellisence有一个强类型对象来接收?否则我必须去查找以确保我称之为同样的事情.
我想做这样的事情:(我知道这不会以这种方式编译,这只是一个例子)
public static void RegisterBundles(BundleCollection bundles)
{
Bundle mobile = new Bundle("mobile");
mobile.AddFile("w/e")
bundles.Add(mobile);
//in page:
@Scripts.Render(BundleConfig.mobile)
Run Code Online (Sandbox Code Playgroud)
或那些影响的东西.
编辑:答案很简单.正如@Hao Kung指出的@Styles.Render只是需要一个URL字符串路径.我创建了一个类来保存.
public class bundles
{
#region Javascript
public static string scripts = "~/bundles/scripts";
...
#endregion
#region CSS
public static string css = "~/Content/css";
public static string jqueryUi = "~/Content/themes/base/css";
...
#endregion
}
Run Code Online (Sandbox Code Playgroud)
在任何页面,你只需要做
@Styles.Render(bundles.jqueryUi)
Run Code Online (Sandbox Code Playgroud)
你有它.你需要付出额外的努力,但至少它现在是强力打字的.
strong-typing asp.net-mvc-4 bundling-and-minification asp.net-optimization
我正在使用ASP.NET MVC4和Visual Studio进行捆绑和缩小.
惯例说:
问题是debug.js扩展也完全被忽略了,当我通过NuGet使用knockout和knockout映射时,这些扩展都带有这些扩展.所以即使在调试模式下我总是得到缩小版本?
我可以将文件从.debug.js重命名为.min.js以获得调试模式下的非缩小版本,但是不会通过nuget中断更新功能吗?
是否有.debug.js文件的解决方案?
是否可以在ASP.NET MVC 4中配置Scripts.Render以在"script"标记中生成"type"属性?
如果是这样,怎么样?
提前致谢,
瑞安
asp.net asp.net-mvc bundling-and-minification asp.net-optimization
我正在使用asp.net捆绑/缩小并将所有内容放在bundle.config中,如下所示:
<styleBundle path="~/css/css">
<include path="~/css/bootstrap.css" />
<include path="~/css/flexslider.css" />
<include path="~/css/font-awesome.css" />
<include path="~/css/Site.css" />
<include path="~/css/orange.css" />
</styleBundle>
Run Code Online (Sandbox Code Playgroud)
但是我想从CDN使用bootstrap.css:
//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css
Run Code Online (Sandbox Code Playgroud)
那么我们怎么能在bundle.config中做到这一点呢?
我目前正在开发一个项目,该项目使用ASP.NET Web Optimization库(v 1.1.0-Beta1)和Bundle Transformer扩展(v 1.7.3-Beta1用于核心,1.7.0-Beta1用于LESS)用于将LESS转换为CSS.基于Web搜索,CSS(及更少)中的路径似乎是一个常见问题,在大多数情况下,建议手动修改CSS并完成它.但是,由于我们的开发和生产环境之间的差异,并且没有拥有受影响的CSS,这样的解决方案是不可行的.
似乎存在两种解决方案.第一种是将捆绑定义的虚拟目录覆盖在包含内容的实际目录上.对我来说,这似乎是一个糟糕的选择.
其次,我选择的路线是使用IItemTransform这样的CssRewriteUrlTransform(在这篇文章中提到.即使这个解决方案也有它的局限性.因此我试图编写自己的ItemTransformer但是看起来它的执行结果被忽略了以下列方式使用时:
public static void RegisterBundles(BundleCollection bundles)
{
/* among other work pass in IItemTransformer to fix paths */
var styleBundle = new StyleBundle("~/bundles/css/styles")
.Include(...)
.Include("~/Content/less/font-awesome.less", new RewriteUrlTransform())
.Include(...);
styleBundle.Transforms.Add(new CssTransformer());
styleBundle.Orderer = new NullOrderer();
bundles.Add(styleBundle);
}
Run Code Online (Sandbox Code Playgroud)
IItemTransform的实现:
public class RewriteUrlTransform : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return (input manipulated with proper path replacing …Run Code Online (Sandbox Code Playgroud) web-optimization asp.net-mvc-4 bundling-and-minification asp.net-optimization bundletransformer
在MVC-4中,用于压缩CSS和Js文件的包可以使用此Razor语法链接到布局文件中: @Scripts.Render("~/JavaScripts")
这会在布局文件中生成一个链接,其中包含指纹,该指纹在每个应用程序构建时重新生成,以协助缓存控制.
所以生成的链接如下所示:
<script src="/JavaScripts?v=dSMc_JTHMMP5GrWnILSYt_QBMw-g1pPlzknSorXpkyQ1"></script>
Run Code Online (Sandbox Code Playgroud)
我想知道指纹是如何生成的(用于类似目的),但Sytem.Web.Optimization尚未开源.
所以我一直在System.Web.Optimization包上得到这个错误
无法加载文件或程序集"System.Web.Optimization"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
根据Scott Guthrie早些时候读过的一篇文章和Mads Kristensen发布的视频,我应该能够通过替换它来自动捆绑/缩小ASP.net MVC 4:
<link href="Styles/reset.css" rel="stylesheet" type="text/css" />
<link href="Styles/normalize.css" rel="stylesheet" type="text/css" />
<link href="Styles/styles.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.8.0.min.js" type="text/javascript"></script>
<script src="Scripts/jquery-validation.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
有了这个:
<link href="Styles/css" rel="stylesheet" type="text/css" />
<script src="Scripts/js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
我尝试过针对.Net 4.0和4.5,它似乎没有什么区别.我收到404错误,链接和脚本标记从不指向捆绑的资源.
这个功能是否从最终版本中删除了?
我想将此功能用于"主题".
这就是我最终实现的方式.希望它有意义......
/// <summary>
/// Render stylesheets HTML for the given theme. Utilizes System.Web.Optimization for bundling and minification
/// </summary>
/// <param name="themeName">Name of theme</param>
/// <returns>HtmlString containing link elements</returns>
public static IHtmlString RenderThemeStyles(string …Run Code Online (Sandbox Code Playgroud) asp.net-mvc asp.net-mvc-4 bundling-and-minification asp.net-optimization
我很难使用 .NET 的新优化框架(用于缩小和捆绑)将 LESS 文件转换为 CSS。
我有一个只包含 LESS 文件的目录。
我使用以下代码将它们捆绑在一起并将它们转换为 CSS:
var lessBundle = new Bundle("~/st-style-common-2")
.IncludeDirectory("~/Admin/Resources/styles/", "*.less");
lessBundle.Transforms.Add(new LessTransform());
lessBundle.Transforms.Add(new CssMinify());
bundles.Add(lessBundle);
Run Code Online (Sandbox Code Playgroud)
我还使用了此处详述的 LessTransform 类。
当 debug="false" 文件被转换成标准 CSS 并编译成一个,正如预期的那样。
但是,当 debug="true" 文件没有被转换时,在 HTML 中留下一堆 .less URL,浏览器不理解这些 URL,IIS 似乎没有处理程序。
我意识到我可以构建一些处理程序来为这些 .less 文件提供服务,但我认为我不需要这样做。即使在调试时,优化框架也不会将 LESS 转换为 CSS 吗?