gpt4 book ai didi

asp.net-mvc-4 - 为什么 MVC4 @Styles.Render() 在 Debug模式下的行为不符合预期

转载 作者:行者123 更新时间:2023-12-03 02:06:32 25 4
gpt4 key购买 nike

我正在 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如下(它比我想要的更复杂,因为需要将子.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() 在 Debug模式下的行为不一样?它在 Release模式下工作。我可以理解您如何不希望它在调试中捆绑和缩小,但我如何强制该 bundle 始终以相同的方式工作?

最佳答案

所以基本上,当 debug="true" 时,脚本/样式渲染方法假设优化已关闭,这意味着没有捆绑和缩小,这意味着它不会调用您的转换;相反,它只会渲染到 bundle 的原始内容的链接(在您的情况下是 boostrap.less )。

您可以通过设置 BundleTable.EnableOptimizations = true 覆盖此行为并始终运行优化。这将强制渲染方法始终进行捆绑/缩小。

关于asp.net-mvc-4 - 为什么 MVC4 @Styles.Render() 在 Debug模式下的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com