У меня есть проект asp.net mvc 5, использующий такие функции:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js"));
}
У меня есть одна версия jqueryui, включенная в мой проект, версия 1.11.0. Однако у меня также есть более ранняя версия (1.8.11) на диске в папке с скриптами, но не включена в проект.
Когда я вызываю @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 есть эти старые файлы. Каждый раз, когда мы сливаемся, они приходят снова.
Как я могу проинструктировать механизм объединения, чтобы игнорировать файлы, которые не являются частью решения?
Вы не можете игнорировать файлы, которые являются частью решения, потому что, когда веб-приложение работает, нет файла решения. Мастер публикации не будет развертывать файлы, которые не являются частью решения. Но если у вас уже развернуто несколько файлов, все они будут отображаться. Я создал этот метод, который захватывает только последний:
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")));
}
установить версию в комплекте:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-1.11.0.js"));
}