รวบรวมมุมมองใน ASP.NET MVC


558

ฉันต้องการงาน msbuild เพื่อรวบรวมมุมมองเพื่อที่ฉันจะได้เห็นว่ามีข้อผิดพลาดในการคอมไพล์ในเวลา ... รวบรวมเวลา ความคิดใด ๆ


1
ฉันไม่ทราบว่าคุณใช้ viewengine อะไร แต่ถ้าคุณใช้มีดโกนคุณอาจต้องการดูโพสต์บล็อกของฉัน: <a href = " chrisvandesteeg.nl/2010/11/22/ … asp.net ของคุณ มุมมอง mvc มีดโกนเป็น dll ที่แยกต่างหาก </a> ควรจะเป็นไปได้ที่จะใช้รหัสนั้นสำหรับมุมมองอื่น ๆ เช่นกัน แต่ยังไม่ได้ทำการทดสอบและยัง
Chris van de Steeg

คำตอบ:


154

ผมตรงไปตรงมาอยากจะแนะนำRazorGeneratorแพคเกจ nuget วิธีที่มุมมองของคุณมี.designer.csไฟล์ที่สร้างขึ้นเมื่อคุณบันทึกและนอกเหนือจากการรวบรวมข้อผิดพลาดเกี่ยวกับเวลาที่คุณดูพวกเขาจะถูกคอมไพล์ล่วงหน้าในแอสเซมบลี (= วอร์มเร็วขึ้น) และ Resharper ให้ความช่วยเหลือเพิ่มเติม

ที่จะใช้นี้รวมถึงRazorGeneratorแพคเกจในตัวคุณ nuget โครงการ ASP.NET MVC และติดตั้ง " มีดโกนปั่นไฟนามสกุล" ภายใต้รายการภายใต้เครื่องมือ→การต่อเติมและปรับปรุง

เราใช้สิ่งนี้และค่าใช้จ่ายต่อการคอมไพล์ด้วยวิธีนี้น้อยกว่ามาก นอกจากนี้ฉันอาจจะแนะนำ. NET Demon โดย RedGateซึ่งจะช่วยลดเวลาในการคอมไพล์ได้อีกมาก

หวังว่านี่จะช่วยได้


1
มีวิธีแก้ปัญหาที่คล้ายกันหรือ VS2012?
แดเนียล

6
โชคไม่ดีที่รองรับเฉพาะ C # และไม่มี VB.Net
Ed DeGagne

3
@zoidbergi RazorGenerator ทำงานร่วมกับ VS2012; เมื่อใช้ RazorGenerator.Mvc และ RazorGenerator.MsBuild: ไม่จำเป็นต้องมีส่วนขยาย ดูบล็อกในstacktoheap.com
Jeroen K

2
สิ่งนี้สามารถใช้เพื่อค้นหาข้อผิดพลาดหรือไม่หรือจะแทนที่เอ็นจินการดูเมื่อปรับใช้แอปพลิเคชัน
niico

ฉันได้ติดตั้งแพคเกจนักเก็ต RazorGenerator และส่วนขยายเครื่องกำเนิดมีดโกน ไม่มีอะไรเปลี่ยนแปลงในโครงการของฉัน ไม่มีไฟล์. designer.cs ปรากฏขึ้น ฉันใช้ visual studio 2017
Michael Samteladze

563

จาก readme word doc สำหรับ RC1 (ไม่ได้จัดทำดัชนีโดย google)

ASP.NET คอมไพเลอร์ขั้นตอนหลังสร้าง

ขณะนี้ข้อผิดพลาดภายในไฟล์มุมมองไม่ถูกตรวจพบจนกว่าจะถึงเวลาทำงาน เมื่อต้องการให้คุณตรวจพบข้อผิดพลาดเหล่านี้ในเวลาคอมไพล์โครงการ ASP.NET MVC จะมีคุณสมบัติ MvcBuildViews ซึ่งถูกปิดใช้งานตามค่าเริ่มต้น หากต้องการเปิดใช้งานคุณสมบัตินี้ให้เปิดไฟล์โครงการและตั้งค่าคุณสมบัติ MvcBuildViews เป็น true ดังแสดงในตัวอย่างต่อไปนี้:

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

หมายเหตุ การเปิดใช้งานคุณลักษณะนี้จะเพิ่มค่าใช้จ่ายในการสร้างเวลา

คุณสามารถอัพเดตโครงการที่สร้างขึ้นด้วย MVC รุ่นก่อนหน้าเพื่อรวมการตรวจสอบความถูกต้องแบบบิลด์ของมุมมองโดยทำตามขั้นตอนต่อไปนี้:

  1. เปิดไฟล์โครงการในเท็กซ์เอดิเตอร์
  2. เพิ่มองค์ประกอบต่อไปนี้ภายใต้องค์ประกอบบนสุด<PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. ในตอนท้ายของไฟล์โครงการให้ยกเลิกการใส่ข้อคิดเห็น<Target Name="AfterBuild">องค์ประกอบและแก้ไขเพื่อให้ตรงกับต่อไปนี้:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
หากสิ่งนี้ไม่เหมาะกับโครงการของคุณให้ตรวจสอบว่าไม่มี <MvcBuildViews> false </MvcBuildViews> อยู่ที่ไหนสักแห่งในไฟล์โครงการของคุณ มันกำลังเอาชนะองค์ประกอบ <MvcBuildViews> ใหม่ที่ฉันเพิ่มไว้ด้านบน
Adrian Grigore

3
@mxmissile: Scott Guthrie แนะนำให้เพิ่ม Web Deployment Project ในโซลูชันของคุณเพื่อรับการสนับสนุนประเภทนี้ในโครงการ Web Application: weblogs.asp.net/scottgu/archive/2006/09/22/ …
Zhaph - Ben Duguid

6
ตรวจสอบให้แน่ใจว่า EnableUpdateable ถูกตั้งค่าเป็นเท็จมิฉะนั้นมุมมองจะไม่ถูกคอมไพล์ล่วงหน้า <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> จริง </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg

55
เพราะเหตุใดทำไม ... ทำไมไม่มีแป้นพิมพ์ลัดสำหรับการสร้างที่มีหรือไม่มีมุมมอง MS ทำไม
dariol

2
นี่คือโซลูชันที่เพิ่มลงในเครื่องมือ MVC stackoverflow.com/a/2670792/878612
lko

50

คุณสามารถใช้aspnet_compilerสำหรับสิ่งนี้:

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

โดยที่ " / Virtual / Application / Path / หรือ / Path / In / IIS / Metabase " มีลักษณะดังนี้: " / MyApp " หรือ " / lm / w3svc2 / 1 / root / "

นอกจากนี้ยังมีงาน AspNetCompilerบน MSDN ซึ่งแสดงวิธีการรวม aspnet_compiler กับ 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
นี่ล้าสมัยดูข้อความที่ตัดตอนมาจากเอกสาร readme ด้านล่าง
JarrettV

1
คำตอบอื่น ๆอธิบายงานโครงการในรายละเอียดมากขึ้น แต่ส่วน aspnet_compiler ยังคงเป็นที่ถูกต้อง (และมีประโยชน์ในการสร้างตัวแทน)
mlhDev

26

นอกจากนี้หากคุณใช้ Resharper คุณสามารถใช้งาน Solution Wide Analysis และมันจะตรวจสอบข้อผิดพลาดของคอมไพเลอร์ที่คุณอาจมีในไฟล์ aspx นั่นคือสิ่งที่เราทำ ...


4
มันเป็นความจริงการทำงานสำหรับไฟล์ aspx แต่วิธีการวิเคราะห์กว้างไม่รวมถึงไฟล์ ascx (การควบคุมผู้ใช้)
mookid8000

3
ฉันเชื่อว่ามันทำใน R # 5 แต่มันเป็นทรัพยากรขนาดใหญ่สำหรับโครงการขนาดใหญ่ (แม้ในเครื่องที่บ้านของฉัน 16GB ก็ไม่คุ้มค่าที่จะใช้)
Andrew

3
@Andrew / @ mookid8000 - R # จะตรวจพบข้อผิดพลาดที่คอมไพเลอร์จะไม่เช่นมุมมองและการกระทำที่หายไป / ไม่ถูกต้อง R # จะทำให้พีซีของคุณช้าลงเล็กน้อย (ฉันคิดว่ามันดีในโครงการขนาดใหญ่ที่มี 4GB ram และ CPU ที่มีเธรดมากเกินไป) แต่ฉันกลับมาใช้เวลาที่ฉันรอได้อย่างง่ายดายและจบลงด้วยการทำงานที่น้อยลง โค้ดเนื่องจาก R # ให้การดำเนินการในระดับที่สูงขึ้นซึ่งแบทช์ร่วมกันหลายขั้นตอนที่ฉันต้องทำเพื่อให้ได้งานเดียวกันด้วยตนเอง โครงการของคุณต้องใหญ่มาก!
Drew Noakes

5
สำหรับโครงการขนาดใหญ่ "ทำให้พีซีของคุณช้าลงนิดหน่อย" เป็นการกล่าวถึง เครื่องสร้างของฉันมี RAM 16 GB และ 8 คอร์ (2 Xeons) และมันก็แค่ CRAWLS ฉันมีความรู้สึกว่า R # ไม่ได้ถูกสร้างขึ้นสำหรับโครงการขนาดของเราแม้ว่า ... เช่นโซลูชันของเรามีประมาณ 30 โครงการสองล้าน LOC และหลายร้อยมุมมอง ฉันชอบ R # ในโครงการขนาดเล็กของเรา (เช่นโครงการไม่กี่โครงการและไม่เกิน 50 วิว) แต่สำหรับโครงการใหญ่ของเราเราต้องปิดเครื่องเสมอ
ปี๊บ

1
อาจใช้งานได้ แต่ RUN Away! ฉันเปิดสิ่งนี้โดยคิดว่าโซลูชันของฉันมีขนาดเล็กและไม่เคย 'วิเคราะห์' เสร็จสิ้นและกิน RAM และ CPU ทั้งหมดของฉัน ใช้เวลา 15 นาทีในการกู้คืน
emragins

11

ASP.NET MVC รุ่นถัดไป (วางจำหน่ายในเดือนมกราคมหรือมากกว่านั้น) ควรมีงาน MSBuild ที่รวบรวมมุมมองดังนั้นคุณอาจต้องรอ

ดูประกาศ


6

คำตอบที่ให้ในที่นี้ใช้ได้กับรุ่น MVC บางรุ่น แต่ไม่ใช่สำหรับรุ่นอื่น

ทางออกที่ง่ายทำงานกับ MVC1 แต่เมื่ออัพเกรดเป็น MVC2 มุมมองก็ไม่ถูกบ่นอีกต่อไป นี่เป็นเพราะข้อผิดพลาดในไฟล์โครงการเว็บไซต์ ดูบทความ Haacked นี้

ดูสิ่งนี้: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx


6

สร้าง> เรียกใช้การวิเคราะห์รหัส

ฮอต: Alt+F11

ช่วยฉันจับข้อผิดพลาดของมีดโกน


2
ฉันตอบคำตอบนี้เพราะฮอตคีย์ได้เปิดเผยข้อผิดพลาดของมีดโกนอย่างแน่นอน อย่างไรก็ตามในภายหลังฉันสังเกตเห็นว่ามันดูเหมือนว่าจะทำงานเฉพาะในกรณีที่คุณมีไฟล์. cshtml เปิดอยู่ใน IDE
Michael12345

1

การใช้สตูดิโอภาพผลผลิต Power Tools ( ฟรี ) ขยายช่วยให้นิด โดยเฉพาะSolution Error Visualizerคุณสมบัติ ด้วยข้อผิดพลาดการคอมไพล์ที่ทำเครื่องหมายด้วยสายตาใน explorer โซลูชัน (ในไฟล์ต้นฉบับที่พบข้อผิดพลาด) อย่างไรก็ตามด้วยเหตุผลบางประการคุณลักษณะนี้ไม่สามารถทำงานได้เหมือนกับข้อผิดพลาดอื่น ๆ ในรหัส

ด้วยมุมมอง MVC ข้อผิดพลาดเวลาคอมไพล์ใด ๆ จะยังคงขีดเส้นใต้เป็นสีแดงในไฟล์. cs ตามลำดับ แต่การส่งสัญญาณข้อผิดพลาดเหล่านี้จะไม่ถูกเผยแพร่ในโซลูชัน Explorer (ไม่ว่าในทางใดถึงแม้จะไม่ใช่ไฟล์ต้นฉบับ)

ขอบคุณสำหรับBlueCloudsการแก้ไขคำสั่งก่อนหน้าของฉัน

ฉันเพิ่งรายงานสิ่งนี้เป็นปัญหาเกี่ยวกับโครงการ github ของส่วนขยาย


1
ฉันลองเครื่องมือเพิ่มประสิทธิภาพการผลิต แต่ไม่ประพฤติตามที่กล่าวไว้ในที่นี้ มีข้อผิดพลาดในมุมมองมีดโกน แต่การสร้างคือความสำเร็จ มุมมองจะไม่ถูกทำเครื่องหมายหรือขีดเส้นใต้ด้วยสีแดงหรือที่ใดก็ได้ในทรีของผู้หาทางออก
Blue Clouds

2
@BlueCloud: คุณพูดถูก ฉันสร้างโครงการตัวอย่างและเพิ่มข้อผิดพลาดในการคอมไพล์ในมุมมอง ส่วนขยายจะขีดเส้นใต้บรรทัดข้อผิดพลาดเป็นสีแดง แต่จะไม่เผยแพร่ข้อผิดพลาดในตัวสำรวจโซลูชัน กำลังแก้ไขสิ่งที่ฉันระบุไว้ในคำตอบ ฉันกำลังทิ้งคำตอบไว้ที่นี่เพราะมันยังช่วยได้เล็กน้อยในขณะที่ไม่สามารถแก้ปัญหาได้อย่างมีประสิทธิภาพ
Veverke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.