如何防止捆绑使用未包含在项目中的文件?

时间:2014-08-29 18:17:08

标签: c# .net asp.net-mvc asp.net-mvc-5 .net-4.5

我有一个像这样使用捆绑的asp.net mvc 5项目:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
            "~/Scripts/jquery-ui-{version}.js"));
}

我的项目版本1.11.0中包含了一个版本的jqueryui。但是,我在脚本文件夹中的磁盘上也有一个旧版本(1.8.11),但未包含在项目中。

enter image description here

当我调用@Scripts.Render("~/bundles/jqueryui")时,它会像这样呈现(包括两个文件)。

<script src="/Scripts/jquery-ui-1.11.0.js"></script>
<script src="/Scripts/jquery-ui-1.8.11.js"></script>

毋庸置疑,这会导致多个问题(这也会发生在css文件中)。显然我可以简单地删除旧文件,而我这样做;但我发现自己经常这样做,因为TFS存储库的另一个分支有这些旧文件。每次我们合并,他们都会再来。

如何指示捆绑引擎忽略不属于解决方案的文件?

2 个答案:

答案 0 :(得分:3)

您不能忽略属于解决方案的文件,因为当Web应用程序运行时,没有解决方案文件。发布向导不会部署不属于解决方案的文件。但是如果你已经部署了多个文件,那么它们都将被渲染。 我创建了这种方法,只抓取最新的方法:

    public static string[] GetLatestVersion(params string[] files)
    {
        System.Collections.Generic.List<string> latestFiles = new System.Collections.Generic.List<string>();
        foreach (var file in files)
        {
            var folder = System.IO.Path.GetDirectoryName(file);
            var phisicalFolder = System.Web.HttpContext.Current.Server.MapPath(folder);
            var pattern = System.IO.Path.GetFileName(file).Replace("{version}", "*");
            var virtualFile = folder.Replace("\\","/") + "/" + System.IO.Path.GetFileName(System.Linq.Enumerable.First(System.Linq.Enumerable.OrderByDescending(System.IO.Directory.GetFiles(phisicalFolder, pattern), x => x)));
            latestFiles.Add(virtualFile);
        }
        return latestFiles.ToArray();
    }

    public static void RegisterBundles(BundleCollection bundles)
    {

        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    GetLatestVersion("~/Scripts/modernizr-{version}.js")));
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    GetLatestVersion("~/Scripts/jquery-*.js")));
    }

答案 1 :(得分:1)

在bundle中设置版本:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
            "~/Scripts/jquery-ui-1.11.0.js"));
}