2013-03-21 24 views
12

Trong ứng dụng thử nghiệm ASP.Net MVC4 đơn giản, tôi đã cài đặt gói NuGet không có dấu chấm và followed this tutorial.Gói ASP.Net MVC4 cho ít tệp không được hiển thị khi gỡ lỗi được đặt thành false

Các tệp .less của tôi đang được phân tích cú pháp chính xác thành CSS và hoạt động tốt khi 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"/> 

Tuy nhiên khi tôi đặt debug=false để có nó rút gọn và kết hợp với một kiểu duy nhất, tôi có được điều này:

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

Dưới đây là tập tin cấu hình bó của tôi; một lần nữa, lấy trực tiếp từ hướng dẫn:

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); 
    } 
} 

Và trong file Layout của tôi:

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

Và đây là lớp LessTransform tôi:

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

Bất kỳ ý tưởng về lý do tại sao các bó không hoạt động đúng trên debug=false?

+0

Bạn có thể thử với câu trả lời này: http://stackoverflow.com/questions/9593254/mvc4-less-bundle-import-directory Ông sử dụng gói BundleTransformer.Less. Nó có thể giúp bạn ... – freshbm

Trả lời

3

Sự cố là lỗi im lặng khi biên dịch .less thành css.


tôi đã sử dụng một breakpoint để kiểm tra lớp học của tôi LessTransform trong đó sử dụng thư viện dotless để biên dịch.

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

tôi nhận thấy rằng khi lơ lửng trên response.Content tôi có thể xem mã less của tôi, nhưng sau khi mã Less.Parse, response.Content sẽ trở nên trống rỗng.

Tôi đã chạy mã số less thông qua trình kiểm tra và nhận thấy lỗi cú pháp trong mã của tôi.

Khi tôi đã sửa lỗi, quá trình đóng gói và rút gọn hoạt động chính xác như mong đợi.

+0

Bạn có thể cho tôi biết nơi có trình kiểm tra mã ít hơn không? –

0

Trừ khi tôi hiểu nhầm những gì bạn đã nói không có ý nghĩa.

Khi bạn có debug = true, có vẻ như các trang mẫu của bạn không được nhóm lại vì chúng được tham chiếu riêng lẻ do đó không được rút gọn/gói thành một tệp duy nhất, điều này được mong đợi khi gỡ lỗi được đặt thành true để bạn có thể dễ dàng gỡ lỗi kịch bản/phong cách của bạn mà không cần phải lội qua mã được rút gọn và gói gọn.

Khi bạn có debug = false, có vẻ như việc thu nhỏ/đóng gói xảy ra khi bạn chỉ nhận được hai url.

Một điều có vẻ lạ là url ít hơn không có hàm băm được liên kết với nghĩa là. v = trống, đây có thể là điều cần xem xét.

Bạn cũng có thể thử tải url <localaddress>/Public/less?v= trong trình duyệt của mình và xem nó trả về gì nếu gặp sự cố khi thu nhỏ/đóng gói sẽ thường đưa ra cảnh báo ở đầu tệp.

0

Có vẻ như bạn có ít tệp trống hơn. Vì vậy, nó là bình thường mà băm không được tạo ra.

Để bạn biết. Bạn không cần sử dụng gói cho ít tệp hơn. Bạn có thể sử dụng từ khóa nhập khẩu để từ chối ít hơn để kết hợp các tệp. @import "a.less";

+1

Ít tệp của tôi không trống, chúng hoạt động tốt khi 'debug' được đặt thành true. – sergserg

+0

Tại sao bạn downvote tôi? Tôi đã cho bạn lời khuyên làm thế nào để giải quyết vấn đề và bạn hoàn toàn bỏ qua nó ... –

12

Đóng gói và rút gọn trong MVC 4.0 theo mặc định là vô hiệu hóa trong chế độ gỡ lỗi, vì việc rút gọn và đóng gói thực hiện gỡ lỗi rất khó hoặc thậm chí đôi khi không thể. Bạn có thể kiểm tra nó bằng cách thiết lập một điểm ngắt trên phương pháp LessTransform.Process. LessTransform.Process chỉ được gọi khi dự án chạy với debug = false hoặc BundleTable.EnableOptimizations = true.

<link href="/Public/less?v=" rel="stylesheet"/> nghĩa là kết quả của gói bị trống.

Hãy chắc chắn rằng ít nhất một trong các tập tin ít tạo ra các nội dung CSS, nếu có thì kiểm tra lớp LessTransform nó phải là:

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

Bằng cách đặt BundleTable.EnableOptimizations = true; trong phương pháp RegisterBundles bạn có thể ghi đè thiết lập mặc định của cơ chế tối ưu hóa (Sắp xếp và rút gọn) ở chế độ gỡ lỗi, sau đó bạn có thể gỡ lỗi và kiểm tra kết quả của Less.Parse(response.Content);

+0

Tôi kiểm tra lại và lớp 'LessTransform' có mã thích hợp bên trong để biến đổi ít thành css. Bất kỳ ý tưởng nào khác? – sergserg

+1

Đây là câu trả lời đúng và nên được chấp nhận bởi vì đây chính xác là những gì OP cho biết anh ấy đã làm trong câu trả lời mà anh ấy tự đăng tải. –

+2

Tôi đã chấp nhận câu trả lời này, nhưng điều đáng nói đến là một lỗi trong tệp 'less' sẽ không thành công ** âm thầm ** và trở thành một gói rỗng. Đó là lý do tại sao tôi đăng câu trả lời của riêng mình - hy vọng nó sẽ giúp ai đó. – sergserg

Các vấn đề liên quan