2013-03-21 50 views
12

在簡單的ASP.Net MVC4測試應用程序中,我安裝了無點的NuGet包和followed this tutorialASP.Net MVC4包,當調試設置爲false時,不會呈現較少文件

我的.less文件被正確解析爲CSS,並且在debug=true時正常工作。

<link href="/Public/less/main.less" rel="stylesheet"/> 
<link href="/Public/less/home.less" rel="stylesheet"/> 
<link href="/Public/less/a.less" rel="stylesheet"/> 
<link href="/Public/less/b.less" rel="stylesheet"/> 
<link href="/Public/less/c.less" rel="stylesheet"/> 

然而,當我爲了讓它運行如下,並結合到一個樣式表設置debug=false,我得到這個:

<link href="/Public/less?v=" rel="stylesheet"/> // NOT WORKING! 

這是我的包配置文件;

public class BundleConfig 
{ 
    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725 
    public static void RegisterBundles(BundleCollection bundles) 
    { 

     // Compile .less files and create a bundle for them. 
     var lessBundle = new Bundle("~/Public/less").Include(
                 "~/Public/less/main.less", 
                 "~/Public/less/home.less", 
                 "~/Public/less/a.less", 
                 "~/Public/less/b.less", 
                 "~/Public/less/c.less"); 
     lessBundle.Transforms.Add(new LessTransform()); 
     lessBundle.Transforms.Add(new CssMinify()); 
     bundles.Add(lessBundle); 
    } 
} 

而且在我的佈局文件:再次,直接從教程採取

<head> 
    @Styles.Render("~/Public/less") 
</head> 

這是我的LessTransform類:

public class LessTransform : IBundleTransform 
{ 
    public void Process(BundleContext context, BundleResponse response) 
    { 
     response.Content = dotless.Core.Less.Parse(response.Content); 
     response.ContentType = "text/css"; 
    } 
} 

爲什麼捆綁任何想法在debug=false上工作不正常?

+0

你可以試試這個答案:http://stackoverflow.com/questions/9593254/mvc4-less-bundle-import-directory他使用BundleTransformer.Less包。它可能會幫助你... – freshbm 2013-03-25 14:33:57

回答

3

.less編譯爲css時,此問題是無提示錯誤。


我使用斷點來檢查我的LessTransform類使用dotless庫進行編譯。

public class LessTransform : IBundleTransform 
{ 
    public void Process(BundleContext context, BundleResponse response) 
    { 
     response.Content = Less.Parse(response.Content); // Breakpoint here. 
     response.ContentType = "text/css"; 
    } 
} 

我注意到,懸停在response.Content當我看到我的less代碼,但Less.Parse代碼之後,response.Content將成爲空。

我跑過我的less代碼通過檢查器,並注意到我的代碼中的語法錯誤。

一旦我解決了我的錯誤,捆綁和縮小按預期正常工作。

+0

你能告訴我哪裏有更少的代碼檢查器嗎? – 2013-06-27 08:48:56

0

除非我誤解你所說的沒有道理。

當你有debug = true它似乎是你的樣式表沒有被捆綁,因爲它們被單獨引用,因此沒有縮小/綁定到單個文件,這是預期的,當調試設置爲true,以便您可以輕鬆地調試您的腳本/樣式,而不必通過縮小和捆綁代碼。

當你有debug = false它似乎縮小/綁定正在發生,因爲你只有兩個網址。

看起來很奇怪的一件事是,較少的URL沒有與它關聯的散列即ie。 v =是空白的,這可能是要看的東西。

您也可以嘗試在瀏覽器中加載網址<localaddress>/Public/less?v=,並查看它在返回時遇到的問題。縮小/綁定它通常會在文件頂部給出警告。

0

看起來你有更少的文件。所以沒有生成散列是正常的。

就這麼你知道。您無需爲較少的文件使用捆綁軟件。你可以少用import關鍵字來合併文件。 @import「a.less」;

+1

我的少文件不是空的,當'debug'設置爲true時,它們工作得很好。 – sergserg 2013-03-30 21:08:41

+0

你爲什麼低估了我?我給了你建議如何解決這個問題,你完全忽略了它... – 2013-03-30 21:24:06

12

在調試模式下,默認情況下,MVC 4.0中的綁定和縮小功能是禁用的,因爲縮小和綁定會使調試變得非常困難甚至有時不可能。您可以通過在LessTransform.Process方法上設置斷點來測試它。 LessTransform.Process僅在項目運行時使用debug = falseBundleTable.EnableOptimizations = true

<link href="/Public/less?v=" rel="stylesheet"/>表示捆綁包的結果爲空。

請確保至少少一個文件生成CSS內容,如果是檢查LessTransform類必須是:

public class LessTransform : IBundleTransform 
{ 
    void IBundleTransform.Process(BundleContext context, BundleResponse response) 
    { 
     response.Content = Less.Parse(response.Content); 
     response.ContentType = "text/css"; 
    } 
} 

通過將BundleTable.EnableOptimizations = true;在RegisterBundles方法您可以覆蓋的優化機制默認設置(捆綁和縮小),然後您可以調試並檢查結果Less.Parse(response.Content);

+0

我重複檢查和'LessTransform'類有正確的代碼裏面轉換成css較少。任何其他想法? – sergserg 2013-03-30 21:10:56

+1

這是正確的答案,應該被接受,因爲這正是OP在自己發佈的答案中所說的。 – 2013-03-31 00:02:43

+2

我已經接受了這個答案,但值得一提的是'less'文件中的一個錯誤會失敗**,並且變成一個空包。這就是爲什麼我發佈自己的答案 - 希望它可以幫助某人。 – sergserg 2013-04-01 03:32:13

相關問題