我有同样的问题,当我捆绑我的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));
我也试过了:
StyleBundle sb = new StyleBundle();
sb.Transforms.Add(new CssRewriteUrlTransform());
但是转换是IBundleTransform类型的,我正在尝试传递一个IItemTransform。
对如何做到这一点有什么建议吗?
发布于 2016-03-29 07:25:46
由于我没有找到更好的答案,我将张贴我的解决方案(这感觉更像是一个解决办法):
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"));
}
}
我愿意接受建设性的批评:)
https://stackoverflow.com/questions/36183400
复制相似问题