ASP.NET MVC में संकलन दृश्य


558

मैं विचारों को संकलित करने के लिए एक msbuild कार्य चाहता हूं ताकि मैं देख सकूं कि क्या संकलन के समय त्रुटियां हैं ... संकलन समय। कोई विचार?


1
मैं नहीं जानता कि आप क्या देख रहे हैं, लेकिन यदि आप रेज़र का उपयोग कर रहे हैं, तो आप मेरे ब्लॉग पोस्ट को देखना चाहेंगे: <a href = " chrisvandesteeg.nl/2010/11/22/… अपने asp.net एक अलग dll में mvc रेजर के विचार </a> अन्य व्यूएन्जाइन्स के लिए भी उस कोड का उपयोग करना संभव होना चाहिए, लेकिन अभी तक ऐसा नहीं किया है और परीक्षण नहीं किया है
क्रिस वैन डे स्टीग

जवाबों:


154

मैं स्पष्ट रूप से RazorGenerator नगेट पैकेज की सिफारिश करूंगा। इस तरह आपके विचारों की एक .designer.csफ़ाइल उत्पन्न होती है जब आप उन्हें सहेजते हैं और आपके विचार के लिए संकलन समय त्रुटियों को प्राप्त करने के शीर्ष पर, उन्हें असेंबली (= तेज़ वार्मअप) में भी प्री-कंपाइल किया जाता है और Resharper कुछ अतिरिक्त सहायता भी प्रदान करता है।

इसका उपयोग करने के लिए आप में ASP.NET MVC प्रोजेक्ट में रेजरगेंटर नगेट पैकेज शामिल करें और टूल → एक्सटेंशन और अपडेट्स के तहत आइटम के तहत " रेजर जेनरेटर " एक्सटेंशन इंस्टॉल करें ।

हम इसका उपयोग करते हैं और इस दृष्टिकोण के साथ प्रति उपरि बहुत कम है। इसके शीर्ष पर मैं शायद RedGate द्वारा .NET दानव की सिफारिश करूंगा जो आगे संकलन समय प्रभाव को काफी कम करता है।

उम्मीद है की यह मदद करेगा।


1
वहाँ एक अनुकरणीय समाधान vor VS2012 है?
डेनियल

6
दुर्भाग्यपूर्ण है कि यह केवल C # का समर्थन करता है और कोई VB.Net
Ed DeGagne

3
@zoidbergi RazorGenerator VS2012 के साथ काम करती है; RazorGenerator.Mvc और RazorGenerator.MsBuild का उपयोग करते समय: विस्तार की कोई आवश्यकता नहीं है। Stacktoheap.com
Jeroen K

2
क्या इसका उपयोग केवल त्रुटियों को खोजने के लिए किया जा सकता है - या क्या यह एप्लिकेशन को तैनात करते समय दृश्य इंजन को प्रतिस्थापित करता है?
निको

मैंने RazorGenerator नगेट पैकेज और रेजर जेनरेटर एक्सटेंशन स्थापित किया है। मेरे प्रोजेक्ट में कुछ भी नहीं बदला गया है। कोई .designer.cs फ़ाइलें दिखाई नहीं दीं। मैं दृश्य स्टूडियो 2017 का उपयोग करता हूं।
माइकल सैमटेलजेज़

563

RC1 के लिए रीडमी शब्द doc से (Google द्वारा अनुक्रमित नहीं)

ASP.NET कम्पाइलर पोस्ट-बिल्ड स्टेप

वर्तमान में, रन समय तक किसी दृश्य फ़ाइल में त्रुटियों का पता नहीं लगाया जाता है। आपको संकलन समय पर इन त्रुटियों का पता लगाने के लिए, ASP.NET MVC परियोजनाओं में अब एक MvcBuildViews संपत्ति शामिल है, जो डिफ़ॉल्ट रूप से अक्षम है। इस गुण को सक्षम करने के लिए, प्रोजेक्ट फ़ाइल खोलें और MvcBuildViews गुण को सत्य पर सेट करें, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:

<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> तत्व को ओवरराइड कर रहा था जिसे मैंने इसके ऊपर जोड़ा था।
एड्रियन ग्रिगोर 16

3
@mxmissile: स्कॉट गुथरी ने वेब एप्लिकेशन प्रोजेक्ट्स में इस प्रकार का समर्थन प्राप्त करने के लिए आपके समाधान में एक वेब परिनियोजन प्रोजेक्ट जोड़ने की सिफारिश की: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph -

6
सुनिश्चित करें कि EnableUpdateable को झूठा सेट किया गया है या अन्य दृश्य पूर्व निर्धारित नहीं होंगे। <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/… )
कार्ल हॉर्गबर्ग

55
क्यों, क्यों, क्यों ... किसी भी दृश्य के साथ या उसके बिना निर्माण के लिए कोई कीबोर्ड शॉर्टकट नहीं है? एमएस क्यों?
दरियाल

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

जहां " / वर्चुअल / एप्लिकेशन / पथ / या पथ / में / IIS / मेटाबेस " कुछ इस तरह है: " / MyApp " या " / lm / w3svc2 / 1 / root / "

इसके अलावा वहाँ एक है AspNetCompiler टास्क MSDN पर, कैसे MSBuild साथ aspnet_compiler एकीकृत करने के लिए दिखा रहा है:

<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
यह पुराना है, नीचे दिए गए रीडमे डॉक का एक अंश देखें।
जराटटीवी

1
अन्य जवाब और अधिक विस्तार में परियोजना कार्य का वर्णन करता है, लेकिन aspnet_compiler भाग अभी भी सही है (और निर्माण एजेंटों पर उपयोगी) है।
mlhDev

26

इसके अलावा, यदि आप Resharper का उपयोग करते हैं, तो आप समाधान विस्तृत विश्लेषण को सक्रिय कर सकते हैं और यह किसी भी कंपाइलर त्रुटियों का पता लगाएगा जो आपके पास aspx फ़ाइलों में हो सकती हैं। यही तो हम भी करते हैं...


4
यह सच है कि यह aspx फ़ाइलों के लिए काम करता है, लेकिन समाधान-विस्तृत विश्लेषण में ascx फ़ाइलें (उपयोगकर्ता नियंत्रण) शामिल नहीं हैं
mookid8000

3
मेरा मानना ​​है कि यह आर # 5 में है, लेकिन यह बड़ी परियोजनाओं के लिए एक बहुत बड़ा संसाधन है (यहां तक ​​कि मेरी 16 जीबी की घरेलू मशीन भी इसका उपयोग करने लायक नहीं है)।
एंड्रयू

3
@Andrew / @ mookid8000 - R # उन त्रुटियों को भी पकड़ लेगा, जो संकलक गायब / गलत विचारों और कार्यों जैसे नहीं करेंगे। R # आपके पीसी को थोड़ा धीमा कर देगा (मैं इसे 4GB रैम और हाइपरथ्रेडेड सीपीयू के साथ एक बड़े-ईश प्रोजेक्ट पर ठीक पाता हूं) लेकिन मैं आसानी से उस समय को वापस कर देता हूं जिसके लिए मैं इंतजार कर रहा हूं, और मैं अपने ऑपरेशन को कम कर रहा हूं R # के रूप में कोड उच्च स्तर के संचालन प्रदान करता है जो बैच को एक साथ कई चरणों मैं एक ही कार्य को मैन्युअल रूप से प्राप्त करने के लिए करना होगा। आपका प्रोजेक्ट बहुत बड़ा होना चाहिए!
आकर्षित नोक

5
बड़ी परियोजनाओं के लिए, "अपने पीसी धीमा थोड़ा" एक ख़ामोश है। मेरी बिल्ड मशीन में 16GB RAM और 8 कोर (2 Xeons) हैं, और यह सिर्फ CRAWLS है। मुझे लगता है कि R # सिर्फ हमारे आकार के प्रोजेक्ट्स के लिए नहीं बनाया गया था ... उदाहरण के लिए हमारे समाधान में ~ 30 परियोजनाएं, कुछ मिलियन LOC और कई सैकड़ों विचार हैं। मुझे हमारी छोटी परियोजनाओं पर R # बहुत पसंद है (उदाहरण के लिए कुछ परियोजनाएं और 50 से अधिक दृश्य नहीं), लेकिन हमारे बड़े पर हमें हमेशा इसे बंद करना होगा।
बीप बीप

1
यह काम करते हैं, लेकिन भागो AWAY! मैं सोच मेरी समाधान छोटा था और यह विश्लेषण 'समाप्त हो गया कभी नहीं और अपने सभी रैम और सीपीयू खा लिया पर इस कर दिया। मुझे ठीक होने में 15 मिनट लगे।
एमरजिन्स

11

ASP.NET MVC की अगली रिलीज़ (जनवरी या जनवरी में उपलब्ध) में MSBuild कार्य होना चाहिए जो विचारों को संकलित करता है, इसलिए आप प्रतीक्षा करना चाहते हैं।

घोषणा देखें


6

यहां दिया गया उत्तर कुछ MVC संस्करणों के लिए काम करता है, लेकिन दूसरों के लिए नहीं।

MVC1 के लिए सरल समाधान ने काम किया लेकिन MVC2 में अपग्रेड करने पर विचारों की शिकायत नहीं की जा रही थी। यह वेबसाइट प्रोजेक्ट फ़ाइलों में बग के कारण था। इस हेकड लेख को देखें।

इसे देखें: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-envc.xx


6

बिल्ड> चलाएँ कोड विश्लेषण

हॉटकी: Alt+F11

रेजर त्रुटियों को पकड़ने में मेरी मदद की।


2
मैंने इस उत्तर को गलत ठहराया क्योंकि हॉटकी ने वास्तव में रेजर त्रुटि को उजागर किया था। हालाँकि मैंने बाद में देखा कि यह तभी काम करता है जब आपके पास .Eshtml फ़ाइल IDE में खुली हो।
Michael12345

1

विजुअल स्टूडियो की प्रोडक्टिविटी पावर टूल्स ( फ्री ) एक्सटेंशन का उपयोग करने से थोड़ी मदद मिलती है । विशेष रूप से, Solution Error Visualizerसुविधा। इसके साथ, संकलन त्रुटियों को समाधान एक्सप्लोरर (स्रोत फ़ाइल में जहां त्रुटि मिली थी) में नेत्रहीन रूप से चिह्नित किया गया है। किसी कारण के लिए, हालांकि, यह सुविधा कोड में कहीं और अन्य त्रुटियों के साथ काम नहीं करती है।

एमवीसी के विचारों के साथ, किसी भी संकलन-समय की त्रुटियों को अभी भी उनकी संबंधित .cs फ़ाइलों में लाल रंग में रेखांकित किया जाएगा, लेकिन इन त्रुटियों को इंगित करते हुए समाधान एक्सप्लोरर में ऊपर की तरफ प्रचारित नहीं किया जाता है (किसी भी तरह, यहां तक ​​कि स्रोत फ़ाइल में नहीं)।

BlueCloudsमेरे पिछले कथन को सही करने के लिए धन्यवाद ।

मैंने इसे विस्तार की गितुब परियोजना पर एक मुद्दे के रूप में रिपोर्ट किया है।


1
मैंने प्रोडक्टिविटी पावर टूल्स की कोशिश की। लेकिन जैसा यहाँ कहा गया है वैसा व्यवहार नहीं करता। रेजर दृश्य में त्रुटि है लेकिन निर्माण सफलता है। विचारों को लाल रंग में, या कहीं भी हल के पेड़ में चिह्नित या रेखांकित नहीं किया गया है।
ब्लू क्लाउड

2
@BlueClouds: आप सही हैं। मैंने एक नमूना परियोजना बनाई और एक दृश्य में संकलन-समय त्रुटि को जोड़ा। विस्तार लाल रंग में अनियमित रेखाओं को रेखांकित करेगा, लेकिन समाधान एक्सप्लोरर में त्रुटि को प्रचारित नहीं करेगा। मैंने उत्तर में जो कहा है उसे ठीक कर रहा हूं। यहाँ जवाब छोड़ रहा हूँ क्योंकि यह अभी भी थोड़ी मदद करता है, जबकि वास्तव में समस्या को प्रभावी ढंग से हल नहीं कर रहा है।
विवेके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.