2011-01-18 24 views
43

काम नहीं कर रहा MVCBuildViews तो मैं निम्नलिखित गुण सेट करने के लिए एक MVC 3 आरटीएम आवेदन पर अपने csproj फ़ाइल संपादित:सही ढंग से

<MvcBuildViews>true</MvcBuildViews> 

इस कारण चाहिए अपने विचार निर्माण के दौरान पालन किया जाना करने के लिए और अगर मेरे विचार निर्माण त्रुटि के लिए मजबूर टूट गया है। यह केवल परिवर्तन मैंने बनाया है, तथापि, जब मैं आवेदन बनाने की कोशिश, मैं निम्नलिखित त्रुटि मिलती है:

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

परियोजना को संकलित करता है और सफलतापूर्वक चलता है, तो मैं वापस गलत पर बदलने के लिए,

निम्नलिखित निर्माण कार्यों csproj फ़ाइल में कॉन्फ़िगर किया गया है

<Target Name="BeforeBuild"> 
</Target> 
<Target Name="AfterBuild"> 
</Target> --> 
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

मैं यहाँ कुछ कमी कर रहा हूँ (इन मैन्युअल रूप से संपादित नहीं किया गया है, वे दृश्य स्टूडियो 2010 से जोड़ा गया था)? मैं बिल्ड समय पर अपने विचारों को सत्यापित करने के लिए एमवीसी 3/विजुअल स्टूडियो 2010 को सही तरीके से कॉन्फ़िगर कैसे करूं?

+0

आपके web.config में कुछ अमान्य खंड परिभाषित किया गया है। यह दुर्भाग्यपूर्ण है कि त्रुटि संदेश कोई विवरण प्रदान नहीं करता है। क्या आपके पास web.config में कुछ संदिग्ध है? – marcind

उत्तर

49

मैं इस समस्या थी कुछ दिन पहले और मैं obj/डीबग फ़ोल्डर को हटाने से यह तय हो गई।

संपादित करें: अधिक स्थायी समाधान के लिए Joe Cartano's answer देखें।

+0

वह था, धन्यवाद। निश्चित नहीं है कि यह इस विशेष त्रुटि का कारण क्यों बनता है लेकिन यह समस्या हल करता है। – Scott

+0

हाँ, कोई विचार नहीं है। शायद एक साफ भी काम किया होगा। –

+2

मैंने कोशिश की, लेकिन हां यह मेरे लिए काम नहीं करता था। मैं सफलता की उम्मीद में नीचे कुछ अन्य समाधानों का प्रयास करूंगा। – MikeJ

0

बदलने का प्रयास करें कि इस के लिए AspNetCompiler लाइन:

<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" /> 
+1

दुर्भाग्यवश इसका कोई प्रभाव नहीं पड़ा ... – Scott

21

जब आपको यह त्रुटि मिलती है तो आपके पास अपने obj फ़ोल्डर में एक और web.config फ़ाइल है? यदि आप MSDeploy का उपयोग कर रहे हैं तो यह मदद कर सकता है: http://blogs.msdn.com/b/webdevtools/archive/2010/05/14/the-aspnet-compiler-build-task-in-visual-studio-2010-asp-net-mvc-2-projects.aspx, यदि नहीं, तो शायद आपके द्वारा चलाए जा रहे कुछ टूल द्वारा एक और web.config उत्पन्न किया जा रहा है।

+7

हां, धन्यवाद। मैंने इसे अपनी .proj फ़ाइल में जोड़ा: ' .. \ bin 'तो अब obj फ़ोल्डर समाधान स्तर पर है, और बिल्ड समस्याएं चली गई हैं !!! –

+1

लिंक का पालन करने के लिए, ' 'तत्व को प्रोजेक्ट फ़ाइल में' 'के नीचे सीधे रखा जा सकता है। "बिन" के बजाय आपकी temp निर्देशिका "obj" नाम देने के लिए यह और अधिक सही हो सकता है लेकिन यह वास्तव में कोई फर्क नहीं पड़ता। –

+0

@ जॉन बुब्रिस्की यदि आप अपनी टिप्पणी से कोड कॉपी करते हैं तो कुछ अजीब यूनिकोड (मुझे लगता है) समस्या है जिससे उद्घाटन टैग समापन टैग से मेल नहीं खाता है, भले ही वे समान दिखें। समापन टैग में "पथ" –

34

यह समस्या तब होती है जब obj फ़ोल्डर में वेब प्रोजेक्ट आउटपुट (templated web.config या अस्थायी प्रकाशित फ़ाइलें) होती है। इस्तेमाल किया गया एएसपी.नेट कंपाइलर ओबीजे फ़ोल्डर में सामानों को अनदेखा करने के लिए पर्याप्त स्मार्ट नहीं है, इसलिए यह बदले में त्रुटियों को फेंकता है।

एक और फिक्स <AspNetCompiler> पर कॉल करने से पहले प्रकाशित आउटपुट को ठीक करना है। अपने .csproj खोलें और यह परिवर्तन:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 
इस के लिए

:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <ItemGroup> 
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" /> 
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" /> 
    </ItemGroup> 
    <Delete Files="@(ExtraWebConfigs)" /> 
    <RemoveDir Directories="@(ExtraPackageTmp)" /> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

कि \ obj के तहत \ obj, साथ ही साथ सभी PackageTmp फ़ोल्डर के अंतर्गत सभी web.configs को नष्ट करेगा।

+0

में "ए" और "टी" के बीच कुछ अदृश्य चरित्र है जो वास्तव में काम करता है - बनाम 2013 एमवीसी 5 – Santhos

+0

यह समाधान मेरे लिए भी काम करता है। VS2013 और MVC5 –

+0

चलाना या यदि आप केवल संपूर्ण obj \ Debug (या obj \ release) फ़ोल्डर को निकालना पसंद करते हैं, तो बस :

2

यह मेरे लिए काम करता है। वैकल्पिक रूप से, आप कॉन्फ़िगरेशन के साथ एक शर्त निर्दिष्ट कर सकते हैं।

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 
<Target Name="AfterBuild" Condition="'$(Configuration)'!='Debug'"> 
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> 
</Target> 
संबंधित मुद्दे