I poprawiły dobrą sugestię Jon Malcolm (i niektóre aktualizacje przez Satpal here), aby rozwiązać kilka niedociągnięć, że w przeszłości:
1) Łamie domyślne zachowanie wiązek z”.min . " Pliki
2) nie pozwala wzorce wyszukiwania, ale tylko pliki mają być wyłączone
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;
}
}
Przykładem użycia że mam ma zawierać wszystkie biblioteki z folderu lib zaczynając kanciasty, ale z wyłączeniem wszystkich skrypty locale (bo tylko jeden zostanie dodana opiera się na języku w osobnym pakiecie później):
bundles.Add(new Bundle("~/bundles/scripts")
.Include("~/wwwroot/lib/angular/angular.js") // Has to be first
.IncludeDirectoryWithExclusion("~/wwwroot/lib", "*.js", true, "*.locale.*.js"));
ten będzie zachowywał się poprawnie, jeśli masz oba angular.min.js i angularjs i dodać w wersji unminified debugowanie i używanie istniejącego .min.js w r elease.
Dlaczego po prostu nie przeniesiesz pliku css z tego katalogu? –
oczywiście mogę to zrobić i określić inny pakiet dla tego pliku, ale lepiej byłoby mieć wszystkie pliki w jednym katalogu, a jeśli go nie potrzebuję, po prostu wyłączę go z pakietu – xurca
Czy masz dużo plików? Możesz zarejestrować każdą css indywidualnie, jeśli masz niewielką liczbę plików. –