css文件,我有這樣的束asp.net的MVC排除束
bundles.Add(new StyleBundle("~/Content/themes/default/css")
.IncludeDirectory("~/Content/themes/Default", "*.css"));
,但我想從它排除一個CSS文件。 是否可以做到這一點,而無需指定捆綁中的每個CSS文件?
css文件,我有這樣的束asp.net的MVC排除束
bundles.Add(new StyleBundle("~/Content/themes/default/css")
.IncludeDirectory("~/Content/themes/Default", "*.css"));
,但我想從它排除一個CSS文件。 是否可以做到這一點,而無需指定捆綁中的每個CSS文件?
嘗試使用IgnoreList.Ignore; bundles.IgnoreList.Ignore(...)
。
有關很好的示例,請參閱:https://stack247.wordpress.com/2014/04/18/asp-net-mvc-4-bundles-ignore-list/ – Kildareflare
這是一個可憐的答案。它沒有解釋如何使用忽略或如何訪問它。這只是一些不良文檔的鏈接,只是一小段代碼,這不能解釋這裏的特質。關於wordpress網站的評論是最有用的東西。 – Liam
擴展方法可能是你需要的東西在這裏:
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"));
我不是在此刻PC因此上述非是經過測試,但應該爲您提供解決方案的模板。
我已經擴展了這個答案來添加搜索模式,並修復了.min版本的缺點:http://stackoverflow.com/a/36080620/1671558 –
這是另一種擴展方法,它重載現有的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());
}
}
我已經喬恩·馬爾科姆提高了很好的建議(和Satpal here一些更新)來修復一些缺點,它有:
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"));
這會循規蹈矩,如果你有兩個angular.min.js和angular.js並添加unminified版本調試和使用r中現有的.min.js聞稿。
謝謝!這個答案也解決了我捆綁的問題。 –
爲什麼不把css文件移出該目錄? –
當然,我可以這樣做,併爲這個文件指定另一個包,但是將所有文件放在一個目錄中會更好,如果我不需要它,我將它從包中排除 – xurca
你有很多文件?如果您有少量文件,您可以單獨註冊每個css。 –