2012-12-21 7 views
23

からCSSファイルを除外しますが、私はそれから1つのcssファイルを除外したいです。 各CSSファイルをバンドルに指定せずにこれを行うことは可能ですか?asp.net MVCは、私は、このようなバンドル <pre><code>bundles.Add(new StyleBundle("~/Content/themes/default/css") .IncludeDirectory("~/Content/themes/Default", "*.css")); </code></pre> <p></p>を持つバンドル

+1

なぜあなたはそのディレクトリからCSSファイルを移動しないのですか? –

+1

もちろんこのファイルには別のバンドルを指定することもできますが、すべてのファイルを1つのディレクトリに入れておく必要があります。バンドルから除外します。 – xurca

+0

たくさんありますかのファイルですか?少数のファイルがある場合は、個々のcssを個別に登録することができます。 –

答えて

34

IgnoreList.Ignoreを試してください。 bundles.IgnoreList.Ignore(...)

+2

:https://stack247.wordpress.com/2014/04/18/asp-net-mvc-4-bundles-ignore-list/ – Kildareflare

+0

これは悪い答えです。 Ignoreの使用方法やアクセス方法については説明していません。それはここでの特質のどれも説明しない小さなスニペットでいくつかの貧弱なドキュメンテーションへの単なるリンクです。ワードプレスサイトについてのコメントは、ここで最も有用なものです。 – Liam

13

拡張メソッドは、ここで必要なものが考えられます。

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ではありませんよあなたのソリューションのテンプレートを提供する必要があります。

+0

私は検索パターンを追加し、短所を.minバージョンに修正するためにこの答えを拡張しました:http://stackoverflow.com/a/36080620/1671558 –

1

既存のIncludeDirectoryメソッドをオーバーロードし、サブディレクトリの検索をサポートする別の拡張メソッドがあります。それは.min「とのバンドルのデフォルトの動作を壊し

1):

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()); 
    } 
} 
4

私はそれが持っていたことを、いくつかの欠点を修正するためにジョン・マルコム(およびSatpal hereによっていくつかのアップデート)により良い提案を改善しています"ファイル

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を使用するエレアース。

+0

ありがとう!この回答は、私がバンドルしていた問題も解決しました。 –

関連する問題

 関連する問題