allowDefinition = 'MachineToApplication' त्रुटि जब VS2010 से प्रकाशित हो रही है (लेकिन केवल पिछले बिल्ड के बाद)


103

मैं अपने स्थानीय कंप्यूटर पर एक मुद्दे के बिना अपने Asp.Net MVC 2 एप्लिकेशन को चला सकता हूं। बस रन / डिबग।

लेकिन अगर मैंने इसे पहले ही बना लिया है, तो मैं इसे प्रकाशित नहीं कर सकता! मुझे समाधान को साफ करना होगा और इसे फिर से प्रकाशित करना होगा। मुझे पता है कि यह महत्वपूर्ण प्रणाली नहीं है, लेकिन यह वास्तव में कष्टप्रद है। "एक क्लिक प्रकाशित" स्वच्छ समाधान नहीं है और फिर एक क्लिक प्रकाशित "

सटीक त्रुटि इस प्रकार है:

त्रुटि 11 यह एक त्रुटि है जिसका उपयोग आवेदन के स्तर से परे allowDefinition = 'MachineToApplication' के रूप में पंजीकृत अनुभाग का उपयोग करने के लिए किया जाता है। यह त्रुटि IIS में किसी अनुप्रयोग के रूप में कॉन्फ़िगर नहीं की जा रही वर्चुअल निर्देशिका के कारण हो सकती है।

मुझे संदेह है कि यह देखने के फ़ोल्डर में Web.Config के साथ करने के लिए कुछ है, लेकिन फिर मैं केवल एक बार पहले निर्माण के बाद ही क्यों। और बस ध्यान दें, एक बार प्रकाशित होने पर ऐप ठीक काम करता है।


1
यदि एक बच्चे की निर्देशिका में एक अतिरिक्त web.config है, तो इसे हटाने का प्रयास करें।
user1154664

जवाबों:


76

मुझे अपने MVC ऐप्स के साथ भी यही समस्या थी। यह निराशाजनक था क्योंकि मैं अभी भी अपने विचारों को जांचना चाहता था, इसलिए मैं MvcBuildViews को बंद नहीं करना चाहता था

सौभाग्य से मैं एक पोस्ट भर आया , जिसने मुझे जवाब दिया। MvcBuildViews को सही रखें , तो आप अपनी परियोजना फ़ाइल में नीचे दी गई पंक्ति जोड़ सकते हैं:

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>

और उस फोल्डर को अपने प्रोजेक्ट के फोल्डर में न बनाएं। मेरे लिये कार्य करता है। यह एक सही समाधान नहीं है, लेकिन यह पल के लिए अच्छा है। सुनिश्चित करें कि आप अपने प्रोजेक्ट फ़ोल्डर से पैकेज फ़ोल्डर ( obj \ Debug और / या obj \ रिलीज़ फ़ोल्डर के अंदर स्थित) को हटा दें अन्यथा आपको त्रुटि मिलती रहेगी

FWIW, MS इस त्रुटि के बारे में जानते हैं ...


1
फिल हैक के पास इस मुद्दे पर एक अद्यतन है, जो उन लोगों के लिए है जो 2010 SP1 में चलाए जा रहे हैं: haacked.com/archive/2011/05/09/…
benpage

3
nb उस ब्लॉग पर जो समाधान है, वह मेरे लिए काम नहीं करता है। उपरोक्त समाधान मेरा एकमात्र समाधान है।
बेनोपेज

9
मुझे लगता है कि obj फ़ोल्डर को हटाना एक बहुत ही सरल उपाय है और प्रोजेक्ट फ़ाइल में परिवर्तनों को याद रखने / बनाए रखने के लिए कम है। ऐसा लगता है कि यहाँ शीर्ष उत्तर होना चाहिए। (2011 के मध्य तक)
रायनडब्ल्यू

एफडब्ल्यूआईडब्ल्यू, यह प्रविष्टि वास्तव में प्रकाशन ( \objपथ) के लिए मध्यवर्ती आउटपुट पथ को बदलता है , न कि MvcBuildViews। अंतर सूक्ष्म है, लेकिन महत्वपूर्ण है।
नवमीं

40

मैंने अपने obj / Debug फ़ोल्डर से सब कुछ हटा दिया और इस त्रुटि को ठीक कर दिया। इसने मुझे अंदर जाने की अनुमति दी

<MvcBuildViews>true</MvcBuildViews>

मेरी परियोजना फ़ाइल में विकल्प (जो T4MVC T4 टेम्पलेट के साथ काम आता है)।

संपादित करें: यह "बिल्ड" -> "पुनर्निर्माण समाधान" मेनू का उपयोग करके बहुत आसान प्राप्त किया जा सकता है (क्योंकि वास्तव में जो पुनर्निर्माण करता है वह obj / डीबग फ़ोल्डर को साफ़ करता है और फिर समाधान का निर्माण करता है)।


26

मैं इस त्रुटि के लिए MS Connect पृष्ठ पर इस समाधान का उपयोग कर रहा हूं । यह AspNetCompiler चलाने से पहले आपकी परियोजना (सभी कॉन्फ़िगरेशन) के तहत सभी obj और अस्थायी फ़ाइलों को साफ़ करता है।

अपनी परियोजना फ़ाइल में MvcBuildViews लक्ष्य को संशोधित करें ताकि यह उन लक्ष्यों पर निर्भर करे जो विज़ुअल स्टूडियो द्वारा बनाई गई पैकेजिंग फ़ाइलों को साफ करते हैं। ये लक्ष्य स्वचालित रूप से वेब एप्लिकेशन परियोजनाओं में शामिल हैं।

सभी पैकेजिंग फ़ाइलों को हर बार हटा दिया जाएगा जो MvcBuildViews लक्ष्य निष्पादित करता है।

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'" DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(MSBuildProjectDirectory)" />
</Target>

मेरे लिये कार्य करता है। मैंने काम करने के लिए निम्नलिखित लक्ष्य पर भी टिप्पणी की: <लक्ष्य नाम = "आफ्टरबिल्ड" कंडीशन = "'$ (MvcBuildViews)' == 'सच'"> <AspNetCompiler VirtualPath = "temp" PhysicalPath = "$ (ProjectDir)" /> <> / टारगेट>
kaptan

अपडेट - MVC 3 टूल अपडेट को इसे ठीक करना चाहिए। haacked.com/archive/2011/05/09/…
jrummell

3
हाँ ... rmdir /S /Q "$(ProjectDir)\obj"Microsoft टिकट के अनुसार पोस्ट बिल्ड सेक्शन में जोड़ने से समस्या हल हो गई!
लेनियल मैकाफेर्री

2012 में, लक्ष्य CleanWebsitesPackageTempDir और CleanWebsitesTransformParametersFiles मौजूद नहीं है, और फिर भी त्रुटि मिलती है।
डेव

2
@jrummell दिलचस्प है, जब मैं अपने mvc4 प्रोजेक्ट में बिल्ड व्यू सक्षम हो जाता हूं, तो मुझे यह MachineToApplication त्रुटि मिल रही है, सोचा कि यह किसी तरह से संबंधित है।
डेव

24

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

एक अन्य फिक्स <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>

यह सभी वेब.configs को \ obj के साथ-साथ सभी पैकेजटेम्प फ़ोल्डर को \ obj के अंतर्गत हटा देगा।


इसके अलावा मेरे सभी upvotes। मुझे objफ़ोल्डर में कुछ गड़बड़ दिखाई दी ।
ta.speot.is

संपादक शिकायत करता है कि अंदर के तत्व <ItemGroup>अमान्य हैं, लेकिन इसे अनदेखा करें - यह वैसे भी काम करता है।
केजेल रिलबे

महान काम किया और मुझे ओबज फ़ोल्डर को हटाने के सिरदर्द से हर बार बचाता है, मैं अपने कॉन्फिग को डिबग से रिलीज करने के लिए स्विच करना चाहता हूं
टोड स्केल्टन

4

यदि आप वेब पब्लिश का उपयोग कर रहे हैं, तो आप सेट कर सकते हैं MvcBuildViews=falseऔर PrecompileBeforePublish=trueजो कि अस्थायी फ़ोल्डर में कॉपी करने के तुरंत बाद (पब्लिश / पैकेज से पहले)।

नोट: PrecompileBeforePublishकेवल "नई" वेब प्रकाशन पाइपलाइन स्टैक (VS2010 SP1 + Azure SDK या VS2012 RTM) द्वारा समर्थित है। यदि आप VS2010 आरटीएम का उपयोग कर रहे हैं, तो आपको वैकल्पिक तरीकों में से एक का उपयोग करने की आवश्यकता होगी।


मैं इस समाधान के विचारों का निर्माण नहीं देखता। मैंने जानबूझकर अपने विचार में त्रुटि डाली और PrecompileBeforePublish = True सेट किया और यह निर्माण विफल नहीं हुआ। (मैं VS2012 का उपयोग कर रहा हूं)
हुलाह

यह मेरे लिए एक वीएसओ बिल्ड में काम करने के लिए हल हो गया, जहाँ मैं / p: PrecompileBeforePublish = true
Stephen McDowell

3

Jrummell द्वारा समाधान के बारे में, सेटिंग:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

यह वीएस 2010 में काम करता है , लेकिन वीएस 2012 में नहीं । 2012 में आपको लगाना होगा:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

स्रोत:

VS 2010: C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets

VS 2012: C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.eb.Publishing.targets


3

मुझे पता है कि यह उत्तर दिया गया है लेकिन मैं अभी कुछ दिलचस्प जोड़ना चाहता था जो मुझे मिला।

मैंने प्रोजेक्ट में झूठे "MvcBuildViews" सेट किया था, सभी बिन और obj फ़ोल्डर्स को हटा दिया और मुझे अभी भी त्रुटि मिल रही थी। मैंने पाया कि एक ".csproj.user" फाइल थी जिसमें अभी भी "MvcBuildViews" सेट था जो सही था।

मैंने ".csproj.user" फ़ाइल को हटा दिया और फिर यह सब काम कर गया।

इसलिए सुनिश्चित करें कि आप अपनी csproj फाइल को बदल रहे हैं या तो आप ".csproj.user" फाइल को भी बदल दें या हटा दें।


1

मेरी यह समस्या भी थी, इसलिए मैंने आउटपुट प्रॉपर्टीज़ को क्लीन करने के लिए प्रोजेक्ट प्रॉपर्टीज़ में प्री-बिल्ड इवेंट बनाया ${projectPath}\bin,${projectPath}\obj\${ConfigurationName}। एक अन्य परियोजना पर मुझे यह त्रुटि भी मिल रही थी, यहां तक ​​कि जगह में सफाई की घटना के साथ भी। दूसरे प्रोजेक्ट पर मैं प्रोजेक्ट फाइल में सूचीबद्ध विचारों को संकलित कर रहा था:

<MvcBuildViews>true</MvcBuildViews>

मैंने सच को असत्य में बदल दिया, और इसने उस त्रुटि के बारे में शिकायत नहीं की, लेकिन फिर भी सही तरीके से चला। मैं यह दावा नहीं करूंगा कि मुझे ठीक-ठीक पता है कि दूसरी त्रुटि क्या थी, लेकिन कम से कम इसने मुझे आगे बढ़ने के लिए प्रेरित किया।


1
उस के लिए धन्यवाद, लेकिन मैं वास्तव में गलत के रूप में MvcBuildViews को चिह्नित नहीं कर सकता क्योंकि यह मेरी तैनाती से पहले मुद्दों को ठीक करने में मदद करता है।
डैन

0

समस्या को मध्यवर्ती फ़ाइलों के साथ करना है, लेकिन एक और समाधान है जो विचारों को बनाने से पहले उन मध्यवर्ती फ़ाइलों को साफ करने में शामिल है।

इस समाधान को वीएस के कुछ संस्करण में शामिल किया गया है, लेकिन मैं केवल यह कह सकता हूं कि मुझे वीएस 2013 अपडेट 5 में समस्या थी। ( नीचे "खबरदार देखें " , यह इस संस्करण में तय किया जा सकता है, लेकिन केवल मेरे विशेष रूप से काम नहीं कर रहा है। गैर-मानक मामला)।

मैंने विज़ुअल स्टूडियो कनेक्ट पर एप्लिकेशन स्तर से परे त्रुटि: allowDefinition = 'MachineToApplication' से सॉल्यूशन उधार लिया था

समाधान में इन पंक्तियों को वेब एप्लिकेशन प्रोजेक्ट ( .csprojफ़ाइल) में शामिल किया गया है, जो ऑफ़ेडिंग मध्यवर्ती फ़ाइलों के विलोपन को संभालता है:

<!--Deal with http://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level, 
we will need to clean up our temp folder before MVC project starts the pre-compile-->
<PropertyGroup>
    <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews>
</PropertyGroup>
<Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews">
    <ItemGroup>
     <_PublishTempFolderNamesToCleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge" />
    </ItemGroup>
    <!--Force msbuild to expand all the wildcard characters so to get real file paths-->
    <CreateItem Include="@(_PublishTempFolderNamesToCleanup->'$(BaseIntermediateOutputPath)**\%(identity)\**\*')">
     <Output TaskParameter="Include" ItemName="_EvaluatedPublishTempFolderNamesToCleanup" />
    </CreateItem>
    <Delete Files="@(_EvaluatedPublishTempFolderNamesToCleanup)" />
</Target>

खबरदार: किसी कारण से, शायद इसलिए कि मैंने इसे परियोजना में खुद को शामिल किया, विचारों के निर्माण के लिए मेरे निर्माण लक्ष्य को "BuildViews"इसके बजाय नामित किया गया था "MvcBuildViews", इसलिए मुझे BeforeTargetsतदनुसार विशेषता को संशोधित करना पड़ा । मैंने टारगेट को सरल किया, हटाकर PropertyGroupऔर इस तरह से कंडीशन को सरल बनाया:

  <Target Name="CleanupForBuildMvcViews" Condition="'$(MVCBuildViews)'=='true' " BeforeTargets="BuildViews">
    <ItemGroup>
     <_PublishTempFolderNamesToCleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge" />
    </ItemGroup>
    <!--Force msbuild to expand all the wildcard characters so to get real file paths-->
    <CreateItem Include="@(_PublishTempFolderNamesToCleanup->'$(BaseIntermediateOutputPath)**\%(identity)\**\*')">
     <Output TaskParameter="Include" ItemName="_EvaluatedPublishTempFolderNamesToCleanup" />
    </CreateItem>
    <Delete Files="@(_EvaluatedPublishTempFolderNamesToCleanup)" />
  </Target>

0

मेरे मामले में मैंने देखा कि जब मेरे पास MvcBuildViews और PrecompileDuringPublish दोनों सत्य हैं - तो क्या यह मुद्दा पैदा कर रहा था।

इसलिए मैंने PrecompileDuringPublish को हटा दिया और उस समाधान ने मेरे लिए काम किया और मैंने इस समस्या का सामना नहीं किया है।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.