ASP.net bundle.IncludeDirectory [дубликат]

Вопрос просто задан неправильно. Вы не делаете псевдоним, который принимает параметры, потому что alias просто добавляет второе имя для того, что уже существует. Функцией, требуемой OP, является команда function для создания новой функции. Вам не нужно псевдонизировать функцию, поскольку функция уже имеет имя.

Я думаю, вы хотите что-то вроде этого:

function trash() { mv "$@" ~/.Trash; }

Вот и все! Вы можете использовать параметры $ 1, $ 2, $ 3 и т. Д. Или просто использовать их все с помощью $ @

24
задан xurca 21 December 2012 в 14:55
поделиться

4 ответа

Попробуйте использовать IgnoreList.Ignore ; bundles.IgnoreList.Ignore(...).

35
ответ дан ricksmt 21 August 2018 в 18:19
поделиться
  • 1
    Для хорошего примера см. stack247.wordpress.com/2014/04/18/… – Kildareflare 9 May 2016 в 21:02
  • 2
    Это плохой ответ. Он не объясняет, как использовать Ignore или как получить доступ к нему. Это просто ссылка на некоторые плохие документы с крошечным фрагментом, который не объясняет ни одной из особенностей здесь. Комментарий о сайте wordpress - самая полезная вещь здесь. – Liam 1 September 2017 в 13:31

Я улучшил хорошее предложение Jon Malcolm (и некоторые обновления Satpal здесь ), чтобы исправить несколько недостатков, которые у него были:

1) Он нарушает поведение по умолчанию пакеты с «.min». файлы

2) Он не позволяет использовать шаблоны поиска, но только файлы, которые должны быть исключены

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Optimization;


public static class BundleExtentions
{
    public static Bundle IncludeDirectoryWithExclusion(this Bundle bundle, string directoryVirtualPath, string searchPattern, bool includeSubDirectories, params string[] excludePatterns)
    {
        string folderPath = HttpContext.Current.Server.MapPath(directoryVirtualPath);

        SearchOption searchOption = includeSubDirectories
                                        ? SearchOption.AllDirectories
                                        : SearchOption.TopDirectoryOnly;

        HashSet<string> excludedFiles = GetFilesToExclude(folderPath, searchOption, excludePatterns);
        IEnumerable<string> resultFiles = Directory.GetFiles(folderPath, searchPattern, searchOption)
                                                    .Where(file => !excludedFiles.Contains(file) && !file.Contains(".min."));

        foreach (string resultFile in resultFiles)
        {
            bundle.Include(directoryVirtualPath + resultFile.Replace(folderPath, "")
                    .Replace("\\", "/"));
        }

        return bundle;
    }

    private static HashSet<string> GetFilesToExclude(string path, SearchOption searchOptions, params string[] excludePatterns)
    {
        var result = new HashSet<string>();

        foreach (string pattern in excludePatterns)
        {
            result.UnionWith(Directory.GetFiles(path, pattern, searchOptions));
        }

        return result;
    }
}

Пример использования, который у меня есть, заключается в том, чтобы включить все библиотеки из папки lib, начиная с угловым, но исключая все языковые скрипты (потому что только один будет добавлен на основе языка в отдельном пакете позже):

bundles.Add(new Bundle("~/bundles/scripts")
                .Include("~/wwwroot/lib/angular/angular.js") // Has to be first
                .IncludeDirectoryWithExclusion("~/wwwroot/lib", "*.js", true, "*.locale.*.js"));

Это будет вести себя правильно, если у вас есть угловые.min.js и angular.js и добавьте unminified версию в отладку и используя существующий .min.js в выпуске.

4
ответ дан Community 21 August 2018 в 18:19
поделиться
  • 1
    Спасибо! Этот ответ также решил проблему, с которой я столкнулся. – Jerod Houghtelling 19 March 2016 в 04:09

Метод расширения может быть тем, что вам нужно здесь:

public static class BundleExtentions
{
    public static Bundle IncludeDirectoryWithExclusion(this StyleBundle bundle, string directoryVirtualPath, string searchPattern, params string[] toExclude)
    {
        var folderPath = HttpContext.Current.Server.MapPath(directoryVirtualPath);

        foreach (var file in Directory.GetFiles(folderPath, searchPattern))
        {
            if (!String.IsNullOrEmpty(Array.Find(toExclude, s => s.ToLower() == file.ToLower())))
            {
                continue;
            }     

            bundle.IncludeFile(directoryVirtualPath + "/" + file);
        }

        return bundle;
}

И тогда использование должно быть:

bundles.Add(new StyleBundle("~/Content/themes/default/css")
   .IncludeDirectoryWithExclusion("~/Content/themes/Default", "*.css", "file-you-dont-want.css"));

На данный момент я не на ПК, поэтому вышеуказанное не проверено, но должно предоставить вам шаблон для вашего решения.

13
ответ дан Jon Malcolm 21 August 2018 в 18:19
поделиться

Вот еще один метод расширения, который перегружает существующие методы IncludeDirectory и поддерживает поиск подкаталогов.

public static class BundleExtensions
{
    public static Bundle IncludeDirectory(
        this Bundle bundle,
        string directoryVirtualPath,
        string searchPattern,
        params string[] filesToExclude)
    {
        return IncludeDirectory(bundle, directoryVirtualPath, searchPattern, false, filesToExclude);
    }
    public static Bundle IncludeDirectory(
        this Bundle bundle,
        string directoryVirtualPath,
        string searchPattern,
        bool searchSubdirectories,
        params string[] filesToExclude)
    {
        var physicalPath = HttpContext.Current.Server.MapPath(directoryVirtualPath);
        return bundle.Include(Directory
            .EnumerateFiles(physicalPath, searchPattern, searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)
            .Select(physicalFileName => physicalFileName.Replace(physicalPath, directoryVirtualPath).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar))
            .Where(virtualFileName => !filesToExclude.Contains(virtualFileName))
            .ToArray());
    }
}
1
ответ дан Lucifer Sam 21 August 2018 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: