首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC: StyleBundle IncludeDirectory和CssRewriteUrlTransform

ASP.NET MVC: StyleBundle IncludeDirectory和CssRewriteUrlTransform
EN

Stack Overflow用户
提问于 2016-03-23 16:17:42
回答 2查看 2.2K关注 0票数 4

我有同样的问题,当我捆绑我的CSS-样式表时,我的图像没有得到解决。

现在,我找到了一些这样的答案,建议使用new CssRewriteUrlTransform()作为新StyleBundle对象的"Include"-Method的第二个参数。This one for example

我使用IncludeDirectory是因为我有一个目录,在这个目录中,我可以添加文件,而不必在某个地方注册(它们是许多我不想列出的文件)。但是IncludeDirectory没有一个覆盖来传递一个CssRewriteUrlTransform对象:

不工作: bundles.Add(new StyleBundle("~/bundles/css/directives").IncludeDirectory("~/app/directives", "*.css", true));

我也试过了:

代码语言:javascript
复制
StyleBundle sb = new StyleBundle();
sb.Transforms.Add(new CssRewriteUrlTransform());

但是转换是IBundleTransform类型的,我正在尝试传递一个IItemTransform。

对如何做到这一点有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 07:25:46

由于我没有找到更好的答案,我将张贴我的解决方案(这感觉更像是一个解决办法):

代码语言:javascript
复制
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"));
    }
}

我愿意接受建设性的批评:)

票数 2
EN

Stack Overflow用户

发布于 2017-06-15 08:04:05

将此扩展方法添加到BundleConfig中,并将其用作

代码语言:javascript
复制
new StyleBundle("~/Bundles/all.css")
   .InclDir("~/WebResources/libref/minton/css", "*.css");

代码:

代码语言:javascript
复制
private static void InclDir(this StyleBundle bundles, string virtualPath, string pattern, bool includeSubDir = false)
{
    var vpath = virtualPath.TrimEnd('/');
    var ppath = HttpContext.Current.Server.MapPath(vpath);
    var files = Directory.GetFiles(ppath, pattern, includeSubDir ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
    foreach (var file in files)
    {
        var vfp = virtualPath + "/" + file.Substring(ppath.Length + 1).Replace("\\", "/");
        bundles.Include(vfp, new CssRewriteUrlTransform());
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36183400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档