用于调试设置为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上不能正常工作,有什么想法吗?

用于调试设置为false时未呈现的较少文件的ASP.Net MVC4捆绑包

MVC 4.0中的捆绑和最小化在调试模式下默认是禁用的,因为缩小和捆绑会使调试变得非常困难,有时甚至不可能。您可以通过在LessTransform.Process方法上设置断点来测试它。LessTransform.Process仅在项目使用debug = falseBundleTable.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";