在MVC4中使用BundleTransformer时找不到方法错误

时间:2013-07-10 21:20:22

标签: asp.net-mvc-4 less bundling-and-minification

我们使用了LESS代码和MVC3应用程序的捆绑,一切正常。 在我们的RegisterBundles()中,我们有如下代码:

var bundle = new
Bundle("~/assets/styles/EnhancedLayoutLess")
     .Include("~/assets/styles/enhanced-layout.less");
bundle.Transforms.Add(new CssTransformer());
BundleTable.Bundles.Add(bundle);

然而,当我们尝试检索捆绑包时,升级到MVC4和最新版本的BundleTransformer:Core(1.6.28),BundleTransfomer:LESS(1.6.26)和Microsoft ASP.NET Web Optimization Framework(1.1.0)之后我们收到以下错误:

  

找不到方法:   “System.Collections.Generic.IEnumerable`1   System.Web.Optimization.BundleResponse.get_Files()”

     

[MissingMethodException:找不到方法:   'System.Collections.Generic.IEnumerable 1<System.IO.FileInfo> System.Web.Optimization.BundleResponse.get_Files()'.]
BundleTransformer.Core.Transformers.TransformerBase.Process(BundleContext context, BundleResponse response) +0
System.Web.Optimization.Bundle.ApplyTransforms(BundleContext context, String bundleContent, IEnumerable
1 bundleFiles)+198
  System.Web.Optimization.Bundle.ProcessRequest(BundleContext context)   +269 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +913 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+165

有什么建议我应该检查一下吗?或者如何在MVC4下使LESS捆绑工作?

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我找到了解决办法:) 此问题是由YuiCompressorTransform类(Yahoo.Yui.Compressor.Web.Optimization)引起的。

处理方法包含以下代码:

// Grab all of the content.
        var rawContent = new StringBuilder();
        foreach (var fileInfo in response.Files)
        {
            using (var reader = fileInfo.OpenText())
            {
                rawContent.Append(reader.ReadToEnd());
            }
        }

但是fileInfo没有OpenText方法。

我已将此更改为以下代码:

using (var stream = fileInfo.VirtualFile.Open())
            {
                var streamReader = new StreamReader(stream);
                rawContent.Append(streamReader.ReadToEnd());
                streamReader.Close();
            }

一切正常。 链接到正确的班级:https://gist.github.com/gr4b4z/8349097

答案 1 :(得分:0)

虽然,初看起来似乎是一个不同的问题,这篇文章解决了我的问题: ASP.NET MVC4 App fails to compile Bootstrap.LESS on production while it works on dev

两种情况下的根本原因都是一样的。显然在MVC4捆绑中使用虚拟路径和现在正常解析的LESS导入无法找到相关文件。

答案 2 :(得分:0)

只有BundleTransformer.Core 1.6.28与Microsoft ASP.NET Web Optimization Framework 1.1.0不兼容。此时,有必要使用BundleTransformer.Core 1.7.12 Beta 1或等待版本1.7.16的发布。