我写了一个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.
我希望这至少有点帮助.