Я улучшил хорошее предложение Джона Малкольма (и некоторые обновления 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, начиная с angular, но исключая все сценарии локали (потому что позже будет добавлен только один на основе языка в отдельном пакете):
bundles.Add(new Bundle("~/bundles/scripts")
.Include("~/wwwroot/lib/angular/angular.js") // Has to be first
.IncludeDirectoryWithExclusion("~/wwwroot/lib", "*.js", true, "*.locale.*.js"));
Это будет работать правильно, если у вас есть и angular.min.js, и angular.js, и вы добавите неминифицированную версию в отладку и используете существующий .min.js в выпуске.
person
Ilya Chernomordik
schedule
18.03.2016