我有一个奇怪的问题与mvc4捆绑不包括文件扩展名.min.js

在BundleConfig类中,我声明

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/jquery")
        .Include("~/Scripts/jquery-1.8.0.js")
        .Include("~/Scripts/jquery.tmpl.min.js"));            
}

在我看来,我宣布

<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    </head><body>test</body>
</html>

当它渲染时,它只渲染

<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

如果我将jquery.tmpl.min.js重命名为jquery.tmpl.js(并相应地更新包中的路径),两个脚本都将正确呈现。

是否有一些配置设置导致它忽略'.min.js'文件?


当前回答

人 我会保持简单,直到微软采取行动

试试这个

在RegisterBundles中为Kendo创建这个bundle

bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
                    "~/Content/kendo/2012.3.1121/kendo.common.min.css",
                     "~/Content/kendo/2012.3.1121/kendo.dataviz.min.css",
                      "~/Content/kendo/2012.3.1121/kendo.blueopal.min.css"
 ));

在_Layout。CSHTML放了这个:

@if (HttpContext.Current.IsDebuggingEnabled)
 { 
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.common.min.css")"      
rel="stylesheet"  type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.dataviz.min.css")" 
rel="stylesheet" type="text/css" />   
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.blueopal.min.css")"    
rel="stylesheet" type="text/css" />
 }
 else
 {
     @Styles.Render("~/Content/kendo/css")   
 }

通过这种方式,我们在生产中得到了最好的包,在调试中得到了引用

当微软修正他们的MVC 4代码时再修正它

其他回答

人 我会保持简单,直到微软采取行动

试试这个

在RegisterBundles中为Kendo创建这个bundle

bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
                    "~/Content/kendo/2012.3.1121/kendo.common.min.css",
                     "~/Content/kendo/2012.3.1121/kendo.dataviz.min.css",
                      "~/Content/kendo/2012.3.1121/kendo.blueopal.min.css"
 ));

在_Layout。CSHTML放了这个:

@if (HttpContext.Current.IsDebuggingEnabled)
 { 
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.common.min.css")"      
rel="stylesheet"  type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.dataviz.min.css")" 
rel="stylesheet" type="text/css" />   
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.blueopal.min.css")"    
rel="stylesheet" type="text/css" />
 }
 else
 {
     @Styles.Render("~/Content/kendo/css")   
 }

通过这种方式,我们在生产中得到了最好的包,在调试中得到了引用

当微软修正他们的MVC 4代码时再修正它

一个简单的方法就是重命名。min文件,比如你有abc.min.css,而不是把这个文件重命名为abc_min.css,然后把它添加到你的bundle中。我知道这不是正确的方法,但这只是一个临时的解决办法。谢谢大家,编码愉快。

对于我的案例,我使用的是(太棒了!)Knockout.js库作为调试/非版本:

"~/Scripts/knockout-{Version}.js"
"~/Scripts/knockout-{Version}.Debug.js"

为了做到这一点,我在我的Bundle中包含了“Knockout-{Version}.js”(非调试),并获得了.debug。js文件在调试模式。

I have found a good solution that works at least in MVC5, you can just use Bundle instead of ScriptBundle. It does not have the smart behavior of ScriptBundle that we don't like (ignoring .min, etc.) in this case. In my solution I use Bundle for 3d party scripts with .min and .map files and I use ScriptBundle for our code. I have not noticed any drawbacks of doing it. To make it work this way you will need to add original file e.g. angular.js, and it will load angular.js in debug and it will bundle the angular.min.js in release mode.

捆扎机有很多好处,看看这个页面,但是:

微软MVC4平台认为每个脚本或样式包至少都有缩小版和非缩小版(其他文件如Debug和vsdoc也可用)。在只有一个文件的情况下,我们会遇到麻烦。

您可以在web中更改调试状态。配置文件永久处理输出:

<compilation debug="false" targetFramework="4.0" />

查看输出变化!文件过滤发生变化。为了达到这个目的,我们必须改变忽略大小写过滤,这会改变应用程序逻辑!