Как я могу предотвратить использование пакетов, не включенных в проект?

1

У меня есть проект 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) на диске в папке с скриптами, но не включена в проект.

Изображение 174551

Когда я вызываю @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 есть эти старые файлы. Каждый раз, когда мы сливаемся, они приходят снова.

Как я могу проинструктировать механизм объединения, чтобы игнорировать файлы, которые не являются частью решения?

Теги:
asp.net-mvc
asp.net-mvc-5
.net-4.5

2 ответа

3
Лучший ответ

Вы не можете игнорировать файлы, которые являются частью решения, потому что, когда веб-приложение работает, нет файла решения. Мастер публикации не будет развертывать файлы, которые не являются частью решения. Но если у вас уже развернуто несколько файлов, все они будут отображаться. Я создал этот метод, который захватывает только последний:

    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

установить версию в комплекте:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
            "~/Scripts/jquery-ui-1.11.0.js"));
}
  • 1
    Хм. Я не большой поклонник этого, я обновляю версии многих других моих связанных файлов довольно часто, я должен был бы не забыть сделать это там также. В крайнем случае, я сделаю это. Спасибо!
  • 0
    вы можете использовать подстановочный знак для принудительной установки только 1.1xxx с "~ / Scripts / jquery-ui-1.1 * .js", как это вы спокойно используете 1.2xxx :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню