Biên dịch khung nhìn trong ASP.NET MVC


558

Tôi muốn một tác vụ msbuild để biên dịch các khung nhìn để tôi có thể xem liệu có lỗi thời gian biên dịch nào không ... biên dịch thời gian. Có ý kiến ​​gì không?


1
Tôi không biết những gì viewengine bạn đang sử dụng, nhưng nếu bạn đang sử dụng Razor, bạn có thể muốn kiểm tra bài viết trên blog của tôi: <a href =" chrisvandesteeg.nl/2010/11/22/... asp.net của bạn mvc Dao cạo nhìn vào một dll riêng biệt </a> Có thể sử dụng mã đó cho các khung nhìn khác, nhưng chưa thực hiện và đã thử nghiệm điều đó
Chris van de Steeg

Câu trả lời:


154

Tôi thực sự muốn giới thiệu gói nuget RazorGenerator . Bằng cách đó, các chế độ xem của bạn có một .designer.cstệp được tạo khi bạn lưu chúng và ngoài việc nhận được các lỗi thời gian biên dịch cho các chế độ xem của bạn, chúng cũng được biên dịch trước trong hội đồng (= khởi động nhanh hơn) và Resharper cũng cung cấp thêm một số trợ giúp.

Để sử dụng điều này, bao gồm gói nuget RazorGenerator trong dự án ASP.NET MVC của bạn và cài đặt tiện ích mở rộng "Trình tạo dao cạo " trong mục bên dưới Công cụ → Tiện ích mở rộng và Cập nhật .

Chúng tôi sử dụng điều này và chi phí cho mỗi lần biên dịch với phương pháp này ít hơn nhiều. Trên hết, tôi có thể khuyên dùng .NET Demon của RedGate , điều này giúp giảm đáng kể thời gian biên dịch tác động.

Hi vọng điêu nay co ich.


1
Có một giải pháp tương tự vor VS2012?
daniel

6
Thật không may là nó chỉ hỗ trợ C # và không có VB.Net
Ed DeGagne

3
@zoidbergi RazorGenerator hoạt động với VS2012; khi sử dụng RazorGenerator.Mvc và RazorGenerator.MsBuild: không cần gia hạn. Xem mục blog trên stacktoheap.com
Jeroen K

2
Điều này có thể được sử dụng để chỉ tìm lỗi - hay nó thay thế công cụ xem khi triển khai ứng dụng?
niico

Tôi đã cài đặt gói nuget RazorGenerator và phần mở rộng của Trình tạo dao cạo. Không có gì đã được thay đổi trong dự án của tôi. Không có tệp .designer.cs xuất hiện. Tôi sử dụng phòng thu trực quan 2017.
Michael Samteladze

563

Từ tài liệu từ readme cho RC1 (không được google lập chỉ mục)

Bước biên dịch ASP.NET

Hiện tại, các lỗi trong tệp xem không được phát hiện cho đến thời gian chạy. Để cho phép bạn phát hiện các lỗi này tại thời điểm biên dịch, các dự án ASP.NET MVC hiện bao gồm một thuộc tính MvcBuildViews, được tắt theo mặc định. Để kích hoạt thuộc tính này, hãy mở tệp dự án và đặt thuộc tính MvcBuildViews thành true, như trong ví dụ sau:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>

Lưu ý Kích hoạt tính năng này thêm một số chi phí vào thời gian xây dựng.

Bạn có thể cập nhật các dự án đã được tạo bằng các bản phát hành MVC trước đó để bao gồm xác thực thời gian xây dựng bằng cách thực hiện các bước sau:

  1. Mở tệp dự án trong một trình soạn thảo văn bản.
  2. Thêm phần tử sau dưới phần tử trên cùng <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. Ở phần cuối của tệp dự án, bỏ ghi chú <Target Name="AfterBuild">phần tử và sửa đổi nó để phù hợp với các mục sau:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
Nếu điều này không hoạt động cho dự án của bạn, hãy kiểm tra xem không có <MvcBuildViews> false </ MvcBuildViews> ở đâu đó trong tệp dự án của bạn. Nó đã ghi đè phần tử <MvcBuildViews> mới mà tôi đã thêm vào bên trên nó.
Adrian Grigore

3
@mxmissile: Scott Guthrie khuyên bạn nên thêm Dự án triển khai web vào giải pháp của mình để nhận được loại hỗ trợ này trong Dự án ứng dụng web: weblogs.asp.net/scottgu/archive/2006/09/22/iêu
Zhaph - Ben Duguid

6
Đảm bảo rằng EnableUpdatizable được đặt thành false nếu không các chế độ xem sẽ không được biên dịch trước. <EnableUpdatizable> false </ EnableUpdatizable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/ thừng )
Carl Hörberg

55
Tại sao, tại sao, tại sao ... không có phím tắt để xây dựng có hoặc không có chế độ xem? MS tại sao?
dariol

2
Đây là giải pháp được thêm vào các công cụ MVC. stackoverflow.com/a/2670792/878612
lko

50

Bạn có thể sử dụng aspnet_compiler cho việc này:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site

trong đó " / Virtual / Application / Path / Hoặc / Path / In / IIS / Metabase " giống như thế này: " / MyApp " hoặc " / lm / w3svc2 / 1 / root / "

Ngoài ra, còn có một tác vụ AspNetCompiler trên MSDN, cho thấy cách tích hợp aspnet_compiler với MSBuild:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
        />
    </Target>
</Project>

5
Điều này đã lỗi thời, xem một đoạn trích từ tài liệu readme dưới đây.
JarrettV

1
Các câu trả lời khác mô tả các nhiệm vụ dự án một cách chi tiết hơn, nhưng phần aspnet_compiler vẫn còn đúng (và hữu ích về các đại lý xây dựng).
mlhDev

26

Ngoài ra, nếu bạn sử dụng Resharper, bạn có thể kích hoạt Solution Wide Phân tích và nó sẽ phát hiện bất kỳ lỗi biên dịch nào bạn có thể có trong các tệp aspx. Đó là những gì chúng tôi làm...


4
Đúng là nó hoạt động với các tệp aspx, nhưng phân tích toàn giải pháp không bao gồm các tệp ascx (điều khiển người dùng)
mookid8000

3
Tôi tin rằng nó có trong R # 5, nhưng nó là một nguồn tài nguyên khổng lồ cho các dự án lớn (ngay cả trên máy gia đình 16 GB của tôi, nó không đáng để sử dụng).
Andrew

3
@Andrew / @ mookid8000 - R # cũng sẽ bắt lỗi mà trình biên dịch sẽ không có, chẳng hạn như các hành động và quan điểm bị thiếu / không chính xác. R # sẽ làm chậm PC của bạn xuống một chút (tôi thấy nó ổn với dự án lớn với ram 4GB và CPU siêu phân luồng) nhưng tôi dễ dàng lấy lại thời gian chờ đợi và cuối cùng tôi thực hiện ít thao tác hơn mã như R # cung cấp các hoạt động cấp cao hơn kết hợp nhiều bước mà tôi phải thực hiện để đạt được cùng một nhiệm vụ theo cách thủ công. Dự án của bạn phải rất lớn!
vẽ Noakes

5
Đối với các dự án lớn, "làm chậm PC của bạn xuống một chút" là một cách đánh giá thấp. Máy dựng của tôi có 16GB RAM và 8 lõi (2 Xeons) và nó chỉ là CRAWLS. Tôi có cảm giác R # chỉ không được thực hiện cho các dự án có quy mô của chúng tôi mặc dù ... ví dụ: giải pháp của chúng tôi có ~ 30 dự án, vài triệu LỘC và nhiều hàng trăm lượt xem. Tôi yêu R # trong các dự án nhỏ hơn của chúng tôi (ví dụ: một vài dự án và không quá 50 lượt xem), nhưng trên dự án lớn của chúng tôi, chúng tôi luôn phải tắt nó.
bíp bíp

1
Điều này có thể làm việc, nhưng CHẠY NGAY! Tôi bật cái này lên vì nghĩ rằng giải pháp của tôi rất nhỏ và nó không bao giờ kết thúc 'phân tích' và ăn hết RAM và CPU của tôi. Mất 15 phút để hồi phục.
biểu diễn

11

Bản phát hành tiếp theo của ASP.NET MVC (có sẵn vào tháng 1 hoặc lâu hơn) sẽ có tác vụ MSBuild để biên dịch các khung nhìn, vì vậy bạn có thể muốn chờ.

Xem thông báo


6

Câu trả lời được đưa ra ở đây hoạt động đối với một số phiên bản MVC nhưng không phải cho các phiên bản khác.

Giải pháp đơn giản đã làm việc cho MVC1 nhưng khi nâng cấp lên MVC2, các khung nhìn không còn bị phàn nàn nữa. Điều này là do một lỗi trong các tập tin dự án trang web. Xem bài viết này Haacked.

Xem điều này: http://haacked.com/archive/2011/05/09/compiling-mvc-view-in-a-build-en môi.aspx


6

Xây dựng> Chạy phân tích mã

Phím nóng: Alt+F11

Giúp tôi bắt lỗi Dao cạo.


2
Tôi đã đưa ra câu trả lời này vì phím nóng thực sự đã để lộ lỗi Dao cạo. Tuy nhiên sau đó tôi nhận thấy rằng nó dường như chỉ hoạt động nếu bạn có tệp .cshtml mở trong IDE.
Michael12345

1

Sử dụng tiện ích mở rộng Năng suất ( miễn phí ) của Visual Studio giúp một chút . Cụ thể, Solution Error Visualizertính năng. Với nó, các lỗi biên dịch được đánh dấu trực quan trong trình khám phá giải pháp (trong tệp nguồn nơi tìm thấy lỗi). Tuy nhiên, vì một số lý do, tính năng này không hoạt động như với các lỗi khác ở bất kỳ nơi nào khác trong mã.

Với các khung nhìn MVC, mọi lỗi thời gian biên dịch sẽ vẫn được gạch chân màu đỏ trong các tệp .cs tương ứng của chúng, nhưng báo hiệu các lỗi này không được truyền lên trong Solution Explorer (không có cách nào, thậm chí không có trong tệp nguồn chứa).

Cảm ơn đã BlueCloudssửa chữa tuyên bố trước đây của tôi.

Tôi vừa báo cáo đây là một vấn đề trong dự án github của tiện ích mở rộng.


1
Tôi đã thử Công cụ năng suất năng suất. Nhưng không hành xử như những gì được nói ở đây. Có lỗi trong chế độ xem dao cạo nhưng xây dựng là thành công. Các khung nhìn không được đánh dấu hoặc gạch chân màu đỏ hoặc bất cứ nơi nào trong cây khai thác giải pháp.
Mây xanh

2
@BlueClouds: bạn nói đúng. Tôi đã tạo một dự án mẫu và thêm một lỗi thời gian biên dịch trong một khung nhìn. Phần mở rộng sẽ gạch chân các dòng lỗi bằng màu đỏ, nhưng sẽ không truyền lỗi lên trong trình khám phá giải pháp. Đang sửa những gì tôi đã nêu trong câu trả lời. Đang để lại câu trả lời ở đây vì nó vẫn giúp một chút, trong khi thực sự không giải quyết vấn đề một cách hiệu quả.
Veverke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.