我正在MVC4中实现捆绑和缩小支持,并设置它,因此可以为我自动编译我的Bootstrap .less文件。我的BundleConfig.cs文件中有以下代码
public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { // base bundles that come with MVC 4 var bootstrapBundle = new Bundle("~/bundles/bootstrap").Include("~/Content/less/bootstrap.less"); bootstrapBundle.Transforms.Add(new TwitterBootstrapLessTransform()); bootstrapBundle.Transforms.Add(new CssMinify()); bundles.Add(bootstrapBundle); } }
TwitterBootsrapLessTransform如下(它比我想要的更复杂,因为需要将sub.less文件导入到dotLess)
public class TwitterBootstrapLessTransform : IBundleTransform { public static string BundlePath { get; private set; } public void Process(BundleContext context,BundleResponse response) { setBasePath(context); var config = new DotlessConfiguration(DotlessConfiguration.GetDefault()); config.LessSource = typeof(TwitterBootstrapLessMinifyBundleFileReader); response.Content = Less.Parse(response.Content,config); response.ContentType = "text/css"; } private void setBasePath(BundleContext context) { BundlePath = context.HttpContext.Server.MapPath("~/Content/less" + "/imports" + "/"); } } public class TwitterBootstrapLessMinifyBundleFileReader : IFileReader { public IPathResolver PathResolver { get; set; } private string basePath; public TwitterBootstrapLessMinifyBundleFileReader(): this(new RelativePathResolver()) { } public TwitterBootstrapLessMinifyBundleFileReader(IPathResolver pathResolver) { PathResolver = pathResolver; basePath = TwitterBootstrapLessTransform.BundlePath; } public bool DoesFileExist(string fileName) { fileName = PathResolver.GetFullPath(basePath + fileName); return File.Exists(fileName); } public byte[] GetBinaryFileContents(string fileName) { throw new System.NotImplementedException(); } public string GetFileContents(string fileName) { fileName = PathResolver.GetFullPath(basePath + fileName); return File.ReadAllText(fileName); } }
在我的基地_Layout.cshtml页面上,我尝试通过这样做来呈现css文件
@Styles.Render("~/bundles/bootstrap");
如mvc tutorial所建议的,客户端浏览器最终请求的文件是
http://localhost:53729/Content/less/bootstrap.less
这会导致错误。如果我将以下链接放入基本布局页面,它按预期工作。
<link href="~/bundles/bootstrap" rel="stylesheet" type="text/css" />
为什么@ Styles.Render()在调试模式下的行为方式相同?它在释放模式下工作。我可以理解你如何不想在调试中进行捆绑和缩小,但是如何强制这个捆绑包总是以同样的方式工作?