我写了一个ASP.NET MVC操作方法,接收一个.less文件名,通过Less.Parse(< filename>)处理它,并输出处理的css文件.
只要代码无效,这样工作正常,但如果有错误,则dotLess只返回一个空字符串.所以如果处理文件有错误,我的action方法返回一个空的css文件.
解决方法
dotLess解析器捕获异常并将其输出到记录器.来自dotLess执行此操作的源代码段为LessEngine.TransformToCss:
- public string TransformToCss(string source,string fileName)
- {
- try
- {
- Ruleset ruleset = this.Parser.Parse(source,fileName);
- Env env = new Env();
- env.Compress = this.Compress;
- Env env2 = env;
- return ruleset.ToCSS(env2);
- }
- catch (ParserException exception)
- {
- this.Logger.Error(exception.Message);
- }
- return "";
- }
Less.Parse有一个重载,它接收一个DotlessConfiguration对象,它提供了可以使用的几个属性:
- public class DotlessConfiguration
- {
- // Properties
- public bool CacheEnabled { get; set; }
- public Type LessSource { get; set; }
- public Type Logger { get; set; }
- public LogLevel LogLevel { get; set; }
- public bool MinifyOutput { get; set; }
- public int Optimization { get; set; }
- public bool Web { get; set; }
- }
您将注意到Logger属性的类型为Type.您提供的任何类型都必须实现dotless.Core.Loggers.ILogger:
- public interface ILogger
- {
- // Methods
- void Debug(string message);
- void Error(string message);
- void Info(string message);
- void Log(LogLevel level,string message);
- void Warn(string message);
- }
正如我们在第一个代码片段中看到的那样,在解析时遇到错误时,记录器上的Error方法将被调用.
现在,所有这一切的一个粘点是实现ILogger类型的实例是如何被实例化的.在内部,dotLess使用被放入DLL的IoC容器.按照方法调用,它似乎最终会调用Activator.CreateInstance来实例化你的ILogger.
我希望这至少有点帮助.