4

CSS-Stylesheets をバンドルすると、画像が解決されないという同じ問題があります。

new CssRewriteUrlTransform()ここで、新しい StyleBundle-Object の「Include」メソッドの 2 番目のパラメーターとして使用することを提案する SO-Answers をいくつか見つけました。これは例えば

IncludeDirectory を使用しているのは、ファイルをどこかに登録せずにファイルを追加できるディレクトリがあるためです (リストしたくないファイルがたくさんあります)。ただし、IncludeDirectory には、CssRewriteUrlTransform-Object を渡すためのオーバーライドがありません。

動作しません: bundles.Add(new StyleBundle("~/bundles/css/directives").IncludeDirectory("~/app/directives", "*.css", true));

私も試しました:

StyleBundle sb = new StyleBundle();
sb.Transforms.Add(new CssRewriteUrlTransform());

しかし、変換は IBundleTransform 型であり、IItemTransform を渡そうとしています。

これを行う方法に関する提案はありますか?

4

2 に答える 2

2

より良い答えが見つからなかったので、解決策を投稿します(回避策のように感じます):

public class BundleConfig {
    private class CssRewriteUrlTransformWrapper : IItemTransform {
        public string Process(string includedVirtualPath, string input) {
            //see https://stackoverflow.com/questions/19765238/cssrewriteurltransform-with-or-without-virtual-directory
            return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);
        }
    }

    private static string MakeVirtualPath(string fromPhysPath, string withVirtualPath) {
        var res = fromPhysPath.Replace("\\", "/");
        var idx = res.IndexOf(withVirtualPath.Replace("~", ""));
        res = "~" + res.Substring(idx);

        return res;
    }

    private static StyleBundle CreateStyleBundleForDir(string virtualPath) {
        StyleBundle res = new StyleBundle(virtualPath + "/bundle");

        string[] cssFilesPhysical = Directory.GetFiles(HttpContext.Current.Server.MapPath(virtualPath), "*.css", SearchOption.AllDirectories);

        List<string> cssFilesVirtual = new List<string>();
        foreach (var file in cssFilesPhysical) {
            res.Include(MakeVirtualPath(file, virtualPath), new CssRewriteUrlTransformWrapper());
        }

        return res;
    }

    public static void RegisterBundles(BundleCollection bundles) {
        bundles.Add(CreateStyleBundleForDir("~/app/custom"));
    }
}

私は建設的な批判に対してオープンです:)

于 2016-03-29T07:25:46.437 に答える