我正在尝试使用MVC4捆绑来对一些较少的文件进行分组,但看起来我正在使用的导入路径已关闭.我的目录结构是:
static/
less/
mixins.less
admin/
user.less
Run Code Online (Sandbox Code Playgroud)
在user.less中,我正在尝试使用以下方法导入mixins.less:
@import "../mixins.less";
Run Code Online (Sandbox Code Playgroud)
这曾经在我使用chirpy和无点之前为我工作,但现在我注意到ELMAH对我生气,说:
System.IO.FileNotFoundException:
You are importing a file ending in .less that cannot be found.
File name: '../mixins.less'
Run Code Online (Sandbox Code Playgroud)
我应该@import和MVC4 使用不同的吗?
这是我用来尝试这个的较少的类和global.asax.cs代码:
LessMinify.cs
...
public class LessMinify : CssMinify
{
public LessMinify() {}
public override void Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content);
base.Process(context, response);
}
}
...
Run Code Online (Sandbox Code Playgroud)
Global.asax.cs
...
DynamicFolderBundle lessFB =
new DynamicFolderBundle("less", new LessMinify(), "*.less");
BundleTable.Bundles.Add(lessFB);
Bundle AdminLess = new Bundle("~/AdminLessBundle", new LessMinify());
...
AdminLess.AddFile("~/static/less/admin/user.less");
BundleTable.Bundles.Add(AdminLess); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用捆绑来组合和缩小一些CSS文件.在我的Global.aspx.cs中,Application_Start我有以下内容:
var jsBundle = new Bundle("~/JSBundle", new JsMinify());
jsBundle.AddDirectory("~/Scripts/", "*.js", false);
jsBundle.AddFile("~/Scripts/KendoUI/jquery.min.js");
jsBundle.AddFile("~/Scripts/KendoUI/kendo.web.min.js");
BundleTable.Bundles.Add(jsBundle);
var cssBundle = new Bundle("~/CSSBundle", new CssMinify());
cssBundle.AddDirectory("~/Content/", "*.css", false);
cssBundle.AddDirectory("~/Content/themes/base/", "*.css", false);
cssBundle.AddFile("~/Styles/KendoUI/kendo.common.min.css");
cssBundle.AddFile("~/Styles/KendoUI/kendo.default.min.css");
BundleTable.Bundles.Add(cssBundle);
Run Code Online (Sandbox Code Playgroud)
在我的.cshtml文件中,我有以下内容:
<link href="/CSSBundle" rel="stylesheet" type="text/css" />
<script src="/JSBundle" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
但是,当我查看我的bundle CSS文件的源代码时,它具有以下内容:
/* Minification failed. Returning unminified contents.
(40,1): run-time error CSS1019: Unexpected token, found '@import'
(40,9): run-time error CSS1019: Unexpected token, found '"jquery.ui.base.css"'
Run Code Online (Sandbox Code Playgroud)
......还有更多
关于如何解决这个问题的任何想法?
我确实将它缩小到以下行:
cssBundle.AddDirectory("~/Content/themes/base/", "*.css", false);
Run Code Online (Sandbox Code Playgroud)
如果我只有那行代码,我会得到相同的错误.
我通过Visual Studio 2012创建了一个新的ASP.NET Web窗体项目.不幸的是,默认的Site.Master文件非常混乱.(我将这些问题一起发布,因为它们非常相关并且引用了相同的代码.)
首先,我已经了解了捆绑和缩小的目的,因此无需讨论.但是我不明白脚本被包含在默认母版页中的方式.
问题1:
为什么在BundleConfig.cs文件中创建了一个名为"〜/ bundles/WebFormsJs"的包,但是在主页中,这些相同的单个.js文件中的每一个都在ScriptManager中逐一列出?
在BundleConfig.cs中:
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
"~/Scripts/WebForms/WebForms.js",
"~/Scripts/WebForms/WebUIValidation.js",
"~/Scripts/WebForms/MenuStandards.js",
"~/Scripts/WebForms/Focus.js",
"~/Scripts/WebForms/GridView.js",
"~/Scripts/WebForms/DetailsView.js",
"~/Scripts/WebForms/TreeView.js",
"~/Scripts/WebForms/WebParts.js"));
Run Code Online (Sandbox Code Playgroud)
Inside Site.Master:
<body>
<form runat="server">
<asp:ScriptManager runat="server">
<Scripts>
<%--Framework Scripts--%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference …Run Code Online (Sandbox Code Playgroud) 为了提高网页的性能,我们建议使用CDN来提供.js网页上的文件.那讲得通.
此外,我们建议捆绑我们的.js文件,以减少加载时对服务器的请求数.
因此,如果我们使用CDN或捆绑.js文件,我们需要坐下来做出决定.
优缺点都有什么?哪些更有意义?
我目前正在研究ASP.NET MVC 3原型解决方案,该解决方案将用作多个项目重写的基础(来自Web表单).
我的目标之一是跨应用程序实现一些脚本管理,而不是我们现在拥有的任何脚本管理.
MVC 3有一个缺陷恕我直言:如果您需要在部分视图或模板视图上指定特定脚本 - 您可能最终要么失去对呈现HTML中脚本块所在位置的控制,要么必须在父视图上指定每个依赖的javascript文件.
我一直在认真考虑使用http://getcassette.net/作为解决所述问题的框架.然而,MVC4 beta的最新版本让我再次怀疑自己:MVC的Bundles看起来与Cassette的Bundles非常相似,我又感到困惑:
我现在应该实现盒式磁带而不是迁移到MVC4捆绑包吗?
我应该自己实现一些简化的脚本管理器(比如MVC4预览中的Scripts helper类)然后迁移到MVC4
或者我应该将盒式磁带集成到项目中,并希望它比MVC的实现更具有前瞻性(我现在真的不喜欢这个选项,仅仅因为盒式磁带附带了大量的依赖性).
我没有Cassette本身的经验,发现很难自己进行比较,并且会欣赏任何答案或提示.
编辑: 我只是想到还有另一种选择:为MVC捆绑安装beta nuget包:https://nuget.org/packages/Microsoft.Web.Optimization
结论: 我对MVC4捆绑实现的看法越多,我注意到的差异越大:MVC4捆绑包不能解决上面描述的MVC3问题 - 它们只是捆绑和缩小.此外,盒式磁带不仅能够在特定位置呈现脚本标签,而且还能够以正确的顺序对它们进行排序,这不是一件容易的事.所以目前我对这两种解决方案都不满意,我会尝试提出自己的简约实施,希望将来情况有所改善.
但是,如果你不害怕在你的项目中添加5个以上的依赖项和一堆web.config更改 - 去卡带.我希望它会在某些时候更新,以利用内部的MVC捆绑来减少功能重复,并且希望将变得更加模块化.
更新: 从Cassette 2.0版开始,如果你只需要捆绑和js依赖解析,就不再需要包含咖啡脚本和Cassette的其他功能.所以在这一点上,卡塞特对我来说是一个明显的赢家.
javascript asp.net asp.net-mvc asp.net-mvc-4 asp.net-optimization
我想知道我在这里做的不正确.我正在使用ASP.NET C#MVC4,我想使用新的css/js优化功能.
这是我的HTML部分
@Styles.Render("~/content/css")
Run Code Online (Sandbox Code Playgroud)
这是我的BunduleConfig.cs一部分
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
// BundleTable.EnableOptimizations = true;
Run Code Online (Sandbox Code Playgroud)
输出(工作):
<link href="/content/css/reset.css" rel="stylesheet"/>
<link href="/content/css/bla.css" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
但是当我取消注释BundleTable.EnableOptimizations = true;html输出时看起来像这样
<link href="/content/css?v=5LoJebKvQJIN-fKjKYCg_ccvmBC_LF91jBasIpwtUcY1" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
这当然是404.我不知道我做错了什么,请帮助,第一次使用MVC4.
我只是尝试ASP.NET 4.5捆绑和缩小,并遇到了一个问题.
我有大约10个css文件,其中2个最初在布局中使用属性media ="screen"引用.
由于将css添加到bundle的语法不允许你指定应该添加这样的属性(有意义,因为该属性将适用于整个bundle),我希望看到@ Styles.Render的重载,允许我指定html属性,就像在其他Html助手中一样,但没有.
有一个丑陋的解决方案,因为我知道创建的bundle的url,我可以自己制作标签,但是我会失去ASP.NET处理的缓存机制,允许它自己渲染标签.
有没有办法做到这一点,我错过了什么?或者这仅仅是对设计团队的监督?
asp.net-mvc asp.net-mvc-4 bundling-and-minification asp.net-optimization
HTML5具有脚本文件的异步属性,以启用异步加载.
<script type="text/javascript" src="myScript.js" async></script>
Run Code Online (Sandbox Code Playgroud)
我可以通过引用我的MVC4捆绑来利用这一点,就像这样引用捆绑包.
<script type="text/javascript" src='@Scripts.Url("~/bundles/jquery")' async></script>
Run Code Online (Sandbox Code Playgroud)
但这意味着我的脚本即使在调试模式下也是捆绑在一起的.
那么我怎样才能在调试时利用捆绑和异步属性而不会失去非缩小.
html5 asp.net-mvc-4 bundling-and-minification asp.net-optimization
我正在尝试使用Twitter引导程序在MVC 4中使用新的捆绑功能,在我看来,像css的字形png文件的路径以某种方式搞砸了.继承我的代码:
bundles.Add(new StyleBundle("~/bundles/publiccss").Include(
"~/Static/Css/bootstrap/bootstrap.css",
"~/Static/Css/bootstrap/bootstrap-padding-top.css",
"~/Static/Css/bootstrap/bootstrap-responsive.css",
"~/Static/Css/bootstrap/docs.css"));
bundles.Add(new ScriptBundle("~/bundles/publicjs").Include(
"~/Static/Js/jquery-1.7.2.js",
"~/Static/Js/bootstrap/bootstrap.js",
"~/Static/Js/cookie/jquery.cookie.js"));
Run Code Online (Sandbox Code Playgroud)
我没有在按钮上看到任何图标,同样如此.我在这里做错了吗?有什么建议?
asp.net asp.net-mvc-4 twitter-bootstrap bundling-and-minification asp.net-optimization
我正在开发一个在Visual Studio 2010中启动的MVC 4项目.现在我正在使用Visual Studio 2012开发一台机器,因为我无法访问我最初使用的机器.我整个上午都试着找到答案,但它们似乎对我的情况没有帮助.
我按照如何为MVC-3-converted-to-4 app添加对System.Web.Optimization的引用,并从nuget安装到我的解决方案中.即使我已经在我的机器上下载并安装了所有必需的参考包,System.Web.Optimization仍然会一直缺失.还有什么我可以做的吗?
编辑:当我尝试构建项目时,我收到以下错误
我的BundleConfig.cs包含
using System.Web;
using System.Web.Optimization;
namespace BCCDC_AdminTool
{
public class BundleConfig
{
// For more information on Bundling, visit http://go.microsoft.com/fwlink/? LinkId=254725
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
// Use the development version of Modernizr to develop with and learn from. Then, when you're
// ready for production, use …Run Code Online (Sandbox Code Playgroud) asp.net ×5
asp.net-mvc ×5
bundle ×2
c# ×2
javascript ×2
cdn ×1
html5 ×1
import ×1
less ×1
webforms ×1