Asp.net mvc 4 为什么MVC4@Styles.Render()在调试模式下的行为不符合预期

Asp.net mvc 4 为什么MVC4@Styles.Render()在调试模式下的行为不符合预期,asp.net-mvc-4,bundling-and-minification,asp.net-optimization,Asp.net Mvc 4,Bundling And Minification,Asp.net Optimization,我正在MVC4中实现捆绑和缩小支持,并将其设置为可以为我自动编译Bootstrap.less文件。我的BundleConfig.cs文件中有以下代码 public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { // base bundles that come with MVC 4 var bootstrapBundle =

我正在MVC4中实现捆绑和缩小支持,并将其设置为可以为我自动编译Bootstrap.less文件。我的BundleConfig.cs文件中有以下代码

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        // base bundles that come with MVC 4

        var bootstrapBundle = new Bundle("~/bundles/bootstrap").Include("~/Content/less/bootstrap.less");
        bootstrapBundle.Transforms.Add(new TwitterBootstrapLessTransform());
        bootstrapBundle.Transforms.Add(new CssMinify());
        bundles.Add(bootstrapBundle);
    }
}
TwitterBootsrapLessTransform如下所示(它比我想要的更复杂,因为需要将sub.less文件导入dotLess)

在我的base\u Layout.cshtml页面上,我试图通过这样做来呈现css文件

@Styles.Render("~/bundles/bootstrap");
正如所建议的,但客户端浏览器最终请求的文件是

http://localhost:53729/Content/less/bootstrap.less
这会导致错误。如果我把下面的链接放到按基本布局页面中,它将按预期工作

<link href="~/bundles/bootstrap" rel="stylesheet" type="text/css" />


为什么@Styles.Render()在调试模式下的行为不一样?它在释放模式下工作。我可以理解您为什么不希望它在调试中捆绑和缩小,但我如何才能强制此捆绑始终以相同的方式工作?

我最后做的是在我的_Layout.cshtml中放置一个debug if语句,以便无论发生什么情况,捆绑都能呈现。我并不热衷于将其作为一种解决方案,但它目前正在发挥作用

@if (Context.IsDebuggingEnabled)
{
    <link href="~/bundles/bootstrap" rel="stylesheet" type="text/css" />
}
else
{
    @Styles.Render("~/bundles/bootstrap")
}
@if(Context.IsDebuggingEnabled)
{
}
其他的
{
@style.Render(“~/bundles/bootstrap”)
}

因此,基本上,当
debug=“true”
时,脚本/样式呈现方法假定优化已关闭,这意味着没有捆绑和缩小,这意味着它不会调用转换;相反,它只会呈现到包的原始内容的链接(在您的例子中是boostrap.less)


您可以通过设置
BundleTable.EnableOptimizations=true
来覆盖此行为并始终运行优化。这将迫使渲染方法始终进行绑定/缩小。

我通过让dotless服务于.less文件来解决这个问题

在web.config中:

   <handlers>
    <add name="dotless" path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler,dotless.Core" resourceType="File" preCondition="" />
    </handlers>


您能将此设置为特定捆绑包的真值吗?不,目前这是一个全局开关,它在整个应用程序中打开/关闭捆绑/切分。我想编辑您的发布,因为我假设属性的名称不是EnableEoptimizations,而是EnableOptimizations。StackOverflow不允许编辑1个字符…:-(我认为这个解决方案比所选答案更优雅),我发现这个代码片段非常有用。你应该考虑写一篇博客文章,说明你是如何获得推特引导和无需合作的。谢谢,也许我能多给自己一些时间,我就开始写博客。在css输出中:缩小失败。返回未显示的内容。(1381,2):运行时错误CSS1019:意外标记,找到“{”…我对剑道最小css文件有问题。greasemonkey缩小器似乎有点敏感。
   <handlers>
    <add name="dotless" path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler,dotless.Core" resourceType="File" preCondition="" />
    </handlers>