我尝试使用MVC4捆绑来分组我的一些较少的文件,但它看起来我正在使用的导入路径是关闭的。我的目录结构是:
static/
less/
mixins.less
admin/
user.less
在user.less中,我尝试使用以下命令导入mixins.less:
@import "../mixins.less";
以前在使用chirpy和dotless时,这对我很有效,但现在我注意到ELMAH对我很生气,说:
System.IO.FileNotFoundException:
You are importing a file ending in .less that cannot be found.
File name: '../mixins.less'
我是不是应该对MVC4使用不同的@import
?
一些附加信息
下面是我尝试使用的更少的类和global.asax.cs代码:
LessMinify.cs
...
public class LessMinify : CssMinify
{
public LessMinify() {}
public override void Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content);
base.Process(context, response);
}
}
...
Global.asax.cs
...
DynamicFolderBundle lessFB =
new DynamicFolderBundle("less", new LessMinify(), "*.less");
BundleTable.Bundles.Add(lessFB);
Bundle AdminLess = new Bundle("~/AdminLessBundle", new LessMinify());
...
AdminLess.AddFile("~/static/less/admin/user.less");
BundleTable.Bundles.Add(AdminLess);
...
发布于 2012-11-01 01:38:21
Ben Cull回答的附录:
我知道这“应该是对Ben Cull的帖子的评论”,但它增加了一点额外的东西,这是不可能在评论中添加的。所以如果你一定要投我的票的话。或者让我关门。
Ben的博客文章做了所有的事情,除了它没有指定缩小。
因此,按照本的建议安装BundleTransformer.Less包,然后,如果您想要最小化您的css,请执行以下操作(在~/App_Start/BundleConfig.cs中):
var cssTransformer = new CssTransformer();
var jsTransformer = new JsTransformer();
var nullOrderer = new NullOrderer();
var css = new Bundle("~/bundles/css")
.Include("~/Content/site.less");
css.Transforms.Add(cssTransformer);
css.Transforms.Add(new CssMinify());
css.Orderer = nullOrderer;
bundles.Add(css);
添加的行是:
css.Transforms.Add(new CssMinify());
CssMinify
在System.Web.Optimizations
中的位置
我松了一口气,绕过了@import问题,并且没有找到扩展名为.less的结果文件,我不在乎谁投了我的票。
相反,如果你觉得有必要投票支持这个答案,请投票给Ben。
这就是了。
发布于 2013-10-03 06:55:45
我发现一个非常有用的变通方法是在LessMinify.Process()中运行Less.Parse之前设置目录。下面是我是如何做到的:
public class LessTransform : IBundleTransform
{
private string _path;
public LessTransform(string path)
{
_path = path;
}
public void Process(BundleContext context, BundleResponse response)
{
Directory.SetCurrentDirectory(_path);
response.Content = Less.Parse(response.Content);
response.ContentType = "text/css";
}
}
然后在创建较少的transform对象时传入路径,如下所示:
lessBundle.Transforms.Add(
new LessTransform(HttpRuntime.AppDomainAppPath + "/Content/Less")
);
希望这能有所帮助。
发布于 2012-03-15 17:56:52
问题是DynamicFolderBundle会读取文件的所有内容,并将组合后的内容传递给LessMinify。
因此,任何@imports都不会引用文件来自的位置。
为了解决这个问题,我不得不将所有“较少”的文件放在一个位置。
然后,您必须了解文件的顺序变得很重要。因此,我开始用一个数字重命名文件(例如:"0 CONSTANTS.less","1 MIXIN.less“,这意味着它们在进入LessMinify之前被加载到组合输出的顶部。
如果您调试您的LessMinify并查看response.Content,您将看到组合较少的输出!
希望这能有所帮助
https://stackoverflow.com/questions/9593254
复制相似问题