用于调试设置为false时未呈现的较少文件的ASP.Net MVC4捆绑包
本文关键字:ASP 文件 Net MVC4 用于 false 设置 调试 | 更新日期: 2023-09-27 18:05:12
在一个简单的ASP.Net MVC4测试应用程序中,我安装了无点NuGet包,并遵循了本教程。
我的.less
文件被正确地解析为CSS,并且在debug=true
时工作良好。
<link href="/Public/less/main.less" rel="stylesheet"/>
<link href="/Public/less/home.less" rel="stylesheet"/>
<link href="/Public/less/a.less" rel="stylesheet"/>
<link href="/Public/less/b.less" rel="stylesheet"/>
<link href="/Public/less/c.less" rel="stylesheet"/>
然而,当我设置debug=false
以使其缩小并合并为一个样式表时,我得到的是:
<link href="/Public/less?v=" rel="stylesheet"/> // NOT WORKING!
这是我的捆绑包配置文件;同样,直接取自教程:
public class BundleConfig
{
// For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
public static void RegisterBundles(BundleCollection bundles)
{
// Compile .less files and create a bundle for them.
var lessBundle = new Bundle("~/Public/less").Include(
"~/Public/less/main.less",
"~/Public/less/home.less",
"~/Public/less/a.less",
"~/Public/less/b.less",
"~/Public/less/c.less");
lessBundle.Transforms.Add(new LessTransform());
lessBundle.Transforms.Add(new CssMinify());
bundles.Add(lessBundle);
}
}
在我的布局文件中:
<head>
@Styles.Render("~/Public/less")
</head>
这是我的LessTransform课程:
public class LessTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
response.Content = dotless.Core.Less.Parse(response.Content);
response.ContentType = "text/css";
}
}
关于为什么捆绑包在debug=false
上不能正常工作,有什么想法吗?
MVC 4.0中的捆绑和最小化在调试模式下默认是禁用的,因为缩小和捆绑会使调试变得非常困难,有时甚至不可能。您可以通过在LessTransform.Process
方法上设置断点来测试它。LessTransform.Process
仅在项目使用debug = false
或BundleTable.EnableOptimizations = true
运行时调用。
<link href="/Public/less?v=" rel="stylesheet"/>
表示bundle的结果为空。
请确保至少有一个较少的文件生成CSS内容,如果是这样,请检查LessTransform
类,它必须是:
public class LessTransform : IBundleTransform
{
void IBundleTransform.Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content);
response.ContentType = "text/css";
}
}
通过将BundleTable.EnableOptimizations = true;
放在RegisterBundles方法中,您可以在调试模式下覆盖优化机制(捆绑和缩小(的默认设置,然后您可以调试和检查Less.Parse(response.Content);
的结果
将.less
编译为css
时,此问题是一个静默错误。
我使用了一个断点来检查我的LessTransform
类,该类使用dotless
库进行编译。
public class LessTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content); // Breakpoint here.
response.ContentType = "text/css";
}
}
我注意到,当悬停在response.Content
上时,我可以看到我的less
代码,但在Less.Parse
代码之后,response.Content
将变为空。
我通过检查程序运行了less
代码,并注意到代码中存在语法错误。
一旦我修复了我的错误,捆绑和缩小就如预期的那样正常工作。
除非我误解了你说的没有意义。
当您有debug = true
时,样式表似乎没有被绑定,因为它们是单独引用的,因此没有被缩小/绑定到一个文件中。当debug设置为true时,这是意料之中的事情,这样您就可以轻松地调试脚本/样式,而无需费力地处理缩小和绑定的代码。
当您有debug = false
时,似乎正在发生缩小/绑定,因为您只得到两个URL。
有一件事看起来很奇怪,那就是less url没有关联的哈希,即v=为空,这可能是需要研究的。
您也可以尝试在浏览器中加载url <localaddress>/Public/less?v=
,看看它会返回什么。如果它在缩小/绑定时遇到问题,它通常会在文件顶部向您发出警告。
看起来您的文件没有空。所以没有生成哈希是正常的。
只是让你知道。对于较少的文件,您不需要使用捆绑包。您可以使用import关键字incedeless来组合文件。@进口"a.less";