2012-10-08 21 views
5

मेरे Asp.Net MVC 4 प्रोजेक्ट में, मैंने <MvcBuildViews>true</MvcBuildViews> दृश्य बनाने के लिए .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.

मैं obj फ़ोल्डर लेकिन त्रुटि रखें स्थापना हटाने का प्रयास। त्रुटि निर्दिष्ट करें कि समस्या प्रमाणीकरण टैग पंक्ति में है:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 

अक्सर, मैं आवेदन चलाकर आवेदन चलाने के लिए सक्षम हूँ (मैं त्रुटि मिली), एप्लिकेशन बनाने और उसके बाद फिर से चल रहा है।

+0

जांचें: http://stackoverflow.com/questions/4725387/mvcbuildviews-not-working- ठीक से –

उत्तर

1

मैं जब मेरी वेब अनुप्रयोग

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

इसे बाहर टिप्पणी कोशिश अपने वेब config में

मैं इस कोड पाया मान्य करने के लिए सक्षम करने MvcBuildViews मेरी उस्तरा वाक्य रचना के बाद प्रकाशित करने के प्रयास में ठीक उसी समस्या थी, तो कि संकलक व्यवहार

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

कर क्या @matrixugly पता चलता है इस मुद्दे को ठीक कर देंगे नहीं बदला गया है, लेकिन यह भी संकलन समय दृश्य रों करने के लिए जाँच का कारण होगा शीर्ष पर भी काम कर रहा है। मुझे लगता है कि आप अभी भी संकलन समय पर अपने विचारों की जांच करना चाहते हैं? यदि ऐसा है, तो नीचे बेहतर सुधार।

यह समझने के लिए क्यों इन समाधानों काम में, हम पहले पता है कि कैसे समस्या पैदा कर रहा है:

  1. डेवलपर संकलन-टाइम दृश्य की जाँच कर चाहता है, तो वे MvcBuildViews=true निर्धारित किया है।
  2. एप्लिकेशन ठीक प्रकाशित करता है, जब तक वे प्रोजेक्ट प्रकाशित नहीं करते हैं।
  3. बाद एक संकलन समय त्रुटि में परियोजना परिणाम का निर्माण करने के प्रयास: 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.

तो क्या इस मुद्दे का कारण बनता है? जब प्रोजेक्ट को संकलक प्रकाशित किया जाता है, तो डिफ़ॉल्ट रूप से यह स्रोत फ़ाइलों की प्रतियों को रखने के लिए <project-dir>\obj\ का उपयोग करता है, जिनके साथ यह काम करेगा। दुर्भाग्यवश, प्रकाशन पूर्ण होने पर इन फ़ाइलों को स्वचालित रूप से हटाया नहीं जाता है। अगली बार जब डेवलपर MvcBuildViews=true के साथ प्रोजेक्ट को संकलित करता है, तो यह त्रुटि हो जाएगा क्योंकि एस्पनेट कंपाइलर में संकलन के दौरान obj\ फ़ोल्डर शामिल है, क्योंकि यह <project-dir> फ़ोल्डर के नीचे है।

तो हम इसे कैसे ठीक कर सकते हैं? खैर, आपके पास चार विकल्प हैं:

  1. MvcBuildViews=false सेट करें। मैं वास्तव में यह एक समाधान नहीं मानता, तो चलो चलते हैं।
  2. <project-dir>\obj\ में फ़ाइलों को हटाएं। काम करता है, लेकिन एक परेशानी हो सकती है क्योंकि इसे प्रत्येक प्रकाशन के बाद किया जाना है।
  3. अपनी प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल में <BaseIntermediateOutputPath> प्रॉपर्टी के उपयोग के माध्यम से एक मध्यवर्ती निर्देशिका के रूप में उपयोग करने वाले पथ को बदलें।

    उदाहरण (रेफरी: this link):

    <BaseIntermediateOutputPath> [SomeKnownLocationIHaveAccessTo] </BaseIntermediateOutputPath>

  4. अपनी परियोजना कॉन्फ़िग फ़ाइल है कि निर्माण (संदर्भ Microsoft Connect) पर आप के लिए हमलावर फ़ाइलों को हटा देता में एक नया खंड जोड़ें। मैं भी, यह आप के लिए आसान बना दिया है बस कॉपी और पेस्ट:

    <PropertyGroup> 
    <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews> 
    </PropertyGroup> 
    <Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews"> 
    <ItemGroup> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" /> 
    </ItemGroup> 
    
    <Delete Files="@(_TempWebConfigToDelete)"/> 
    </Target> 
    

मेरे सिफारिश या तो विकल्प का उपयोग किया जाएगा 3 या 4

N.B. उन लोगों के लिए जिन्होंने कभी भी अपनी प्रोजेक्ट फ़ाइल संपादित नहीं की है, आप इसे लोड करते समय संपादित नहीं कर सकते हैं। इसे पहले दायाँ क्लिक करके और Unload Project चुनकर इसे अनलोड किया जाना चाहिए। फिर आप प्रोजेक्ट पर राइट-क्लिक कर सकते हैं और प्रोजेक्ट फ़ाइल को संपादित कर सकते हैं। वैकल्पिक रूप से, आप विजुअल स्टूडियो के बाहर फ़ाइल को संपादित कर सकते हैं।