相关疑难解决方法(0)

如何指定显式ScriptBundle包含订单?

我正在尝试MVC4 System.Web.Optimization 1.0 ScriptBundle功能.

我有以下配置:

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        // shared scripts
        Bundle canvasScripts =
            new ScriptBundle(BundlePaths.CanvasScripts)
                .Include("~/Scripts/modernizr-*")
                .Include("~/Scripts/json2.js")
                .Include("~/Scripts/columnizer.js")
                .Include("~/Scripts/jquery.ui.message.min.js")
                .Include("~/Scripts/Shared/achievements.js")
                .Include("~/Scripts/Shared/canvas.js");
        bundles.Add(canvasScripts);
    }
}
Run Code Online (Sandbox Code Playgroud)

以及以下观点:

<script type="text/javascript" src="@Scripts.Url(BundlePaths.CanvasScripts)"></script>
Run Code Online (Sandbox Code Playgroud)

哪里BundlePaths.CanvasScripts"~/bundles/scripts/canvas".它呈现:

<script type="text/javascript" src="/bundles/scripts/canvas?v=UTH3XqH0UXWjJzi-gtX03eU183BJNpFNg8anioG14_41"></script>
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好,除了~/Scripts/Shared/achievements.js是捆绑源中的第一个脚本.这取决于它之前包含的每个脚本ScriptBundle.我如何确保它遵守我向包中添加include语句的顺序?

更新

这是一个相对较新的ASP.NET MVC 4应用程序,但它引用了优化框架预发布包.我删除了它并从http://nuget.org/packages/Microsoft.AspNet.Web.Optimization添加了RTM包.使用web.config中带有debug = true的RTM版本,@Scripts.Render("~/bundles/scripts/canvas")以正确的顺序呈现各个脚本标记.

在web.config中使用debug = false,组合脚本首先使用achievement.js脚本,但由于它是稍后调用的函数定义(对象构造函数),因此它运行时没有错误.也许minifier足够聪明,可以找出依赖关系?

我还尝试了IBundleOrdererDarin Dimitrov在RTM中使用两种调试选项建议的实现,并且它的行为相同.

所以缩小版本不是我期望的顺序,但它的工作原理.

asp.net-mvc bundle asp.net-mvc-4 asp.net-optimization

91
推荐指数
5
解决办法
6万
查看次数

Bundle.config对调试,发布和缩小感到困惑

我读了这篇文章http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification,我觉得它中缺少很多内容.

我正在开发一个使用未经编辑的javascript文件的项目.然而,当我决定将我的项目发布到另一台服务器时,这就成了一个问题,其中bundle.config劫持了我的javascript文件,做了一些我从未知道我需要测试我的开发的东西,现在我的开发机器抛出各种各样的javascript错误.所以现在,我在这里,阅读bundle.config对min文件的作用.

阅读完文章后,我做了以下假设:

如果我将项目设置为调试模式,我的项目将获得所有不包含任何"min.js"文件的javascript文件.

如果我将项目设置为发布模式,我的项目将尝试获取所有min.js文件,如果没有min.js文件,则非min文件将转换为缩小版本.

基于这两个假设,事实证明我错了.切换到Release模式对min文件没有任何作用,它的作用方式与我的Debug模式相同.

其次,进入web.config并将以下内容设置为false(以前为true):

<compilation debug="false" /> 
Run Code Online (Sandbox Code Playgroud)

获取所有未缩小的文件并缩小它们,忽略我拥有的任何最小文件!我没有看到任何关于File.min.js的内容,我看到的就像是:"文件?v = dw-fikdksdm ..."这很好,因为这被认为是"捆绑"并且缩小了,但为什么我不能只看到我的分钟装?如果缩小和捆绑会引发javascript错误会怎样?那时我该怎么办?我可以阻止某些javascript文件不被包含在一个包中和/或缩小吗?

另外我注意到在尝试加载javascript资源时会发生一些403错误.

有人可以解释这里发生了什么以及为什么这违背了我原来的假设?

bundle minify asp.net-mvc-5

12
推荐指数
1
解决办法
1万
查看次数

ASP.Net MVC 5子目录捆绑问题

我在ASP.Net MVC 5项目中看到了捆绑的奇怪行为.当我在BundleConfig.cs文件中显式声明所有文件时,我的项目工作得很好,如下所示:

bundles.Add(new ScriptBundle("~/bundles/app").Include(
                "~/app/app.js",
                "~/app/config.js",
                "~/app/dir1/file1.js",
                "~/app/dir1/subdir1/file2.js",
                .....
Run Code Online (Sandbox Code Playgroud)

但是,如果我转而使用IncludeDirectory,则开发(BundleTable.EnableOptimizations = false)期间的脚本路径不完整.这就是我所看到的:

bundles.Add(new ScriptBundle("~/bundles/app").Include(
                "~/app/app.js",
                "~/app/config.js")
                .IncludeDirectory("~/app/dir1", "*.js", true)
Run Code Online (Sandbox Code Playgroud)

当Chrome试图获取时,Chrome会向我显示404 file2.js.捆绑系统将以下内容添加到我的布局页面:

<script src="/app/app.js"></script>
<script src="/app/config.js"></script>
<script src="/app/dir1/file1.js"></script>
<script src="/app/dir1/file2.js"></script>
Run Code Online (Sandbox Code Playgroud)

通往file2.js错误的道路.它省略subdir1了路径的一部分.我在这里错过了什么吗?

c# asp.net-mvc bundling-and-minification

9
推荐指数
1
解决办法
9114
查看次数

使用NuGet的Visual Studio javaScript默认目录

我需要一些帮助来组织VS中的js文件.

所以我的问题是,VS(MVC)默认将所有js文件放入脚本目录中,但我也在子目录中创建了js,如下所示:
在此输入图像描述

现在我的问题是,当我打开脚本文件夹时,NuGet安装的js文件长度为2-3个屏幕,所以我要么每次打开/关闭它,要么就像没有明天一样滚动.

所以我的问题是,它有什么好的解决方案吗?就像将所有文件移动到子目录中,并更改每个包和NuGet配置,或者我应该为自定义js文件创建单独的脚本目录?有什么好主意吗?

javascript c# asp.net-mvc nuget visual-studio-2015

5
推荐指数
1
解决办法
792
查看次数