ASP.Net MVC4包,用于在调试设置为false时不呈现较少的文件

时间:2013-03-21 13:52:22

标签: c# asp.net-mvc-4 less bundle minify

在一个简单的ASP.Net MVC4测试应用程序中,我安装了无点的NuGet包和followed this tutorial

我的.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无效的原因的任何想法?

4 个答案:

答案 0 :(得分:11)

默认情况下,MVC 4.0中的捆绑和缩小在调试模式下是禁用的,因为缩小和捆绑会使调试非常困难甚至有时不可能。您可以通过在LessTransform.Process方法上设置断点来测试它。 LessTransform.Process仅在项目与debug = falseBundleTable.EnableOptimizations = true一起投放时调用。

<link href="/Public/less?v=" rel="stylesheet"/>表示捆绑包的结果为空。

请确保至少有一个较少的文件生成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);的结果

答案 1 :(得分:3)

.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代码,发现代码中出现语法错误。

一旦我修正了错误,捆绑和缩小就会按预期正常工作。

答案 2 :(得分:0)

除非我误解你所说的内容没有意义。

当你有debug = true时,你的样式表似乎没有捆绑,因为它们被单独引用,因此没有缩小/捆绑到一个文件中,当debug被设置为true时,这是预期的可以轻松地调试您的脚本/样式,而无需涉及缩小和捆绑的代码。

当你有debug = false时,似乎会出现缩小/捆绑,因为你只得到两个网址。

看起来很奇怪的一件事是,url不具有与之关联的哈希,即。 v =是空白,这可能需要考虑。

您还可以尝试在浏览器中加载网址<localaddress>/Public/less?v=,如果在缩小/捆绑时遇到问题,请查看其返回的内容,通常会在文件顶部发出警告。

答案 3 :(得分:0)

看起来你的文件空白少了。所以没有生成哈希是正常的。

就这样你知道。您不需要使用bundle来减少文件。您可以使用import insinde less来组合文件。 @import“a.less”;