allowDefinition = 'MachineToApplication' errore durante la pubblicazione da VS2010 (ma solo dopo una generazione precedente)

StackOverflow https://stackoverflow.com/questions/2566215

Domanda

posso correre il mio Asp.Net MVC 2 applicazione senza un problema sul mio computer locale. Basta Run / Debug.

Ma se ho già costruito, non posso pubblicarlo! Devo pulire la soluzione e pubblicarlo di nuovo. So che questo non è il sistema critico, ma è davvero fastidioso. "One Click Pubblica" non è "la soluzione Clean e poi un click pubblicare"

L'errore esatto è il seguente:

  

Errore 11 Si tratta di un errore di utilizzare un   sezione registrata come   allowDefinition = 'MachineToApplication'   oltre il livello di applicazione. Questo errore   può essere causato da una directory virtuale   non essendo configurato come un'applicazione   in IIS.

ho il sospetto che sia qualcosa a che fare con il web.config nella cartella Visualizzazioni, ma allora perché solo dopo che costruisco una volta in precedenza. E proprio per nota, l'applicazione funziona bene una volta pubblicato.

È stato utile?

Soluzione

ho avuto lo stesso problema con le mie applicazioni MVC. è stato frustrante perché volevo ancora le mie opinioni da controllare, in modo che io non volevo spegnere MvcBuildViews

Per fortuna mi sono imbattuto in un messaggio che mi ha dato la risposta. mantenere i MvcBuildViews come true , quindi è possibile aggiungere la seguente riga sotto nel file di progetto:

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>

e fare quella cartella non nella cartella del progetto. Per me va bene. Non è una soluzione perfetta, ma è un bene per il momento. Assicurati di rimuovere il pacchetto la cartella (che si trova all'interno del obj \ Debug e / o obj \ Release cartella) dalla cartella del progetto altrimenti si' ll continuo a ricevere l'errore.

FWIW, MS sanno su questo errore ...

Altri suggerimenti

ho cancellato tutto dalla mia cartella obj / Debug e risolto questo errore. Questo mi ha permesso di lasciare in

<MvcBuildViews>true</MvcBuildViews>

opzione nel mio file di progetto (che viene in aiuto con il modello T4MVC T4).

Modifica: Ciò può essere ottenuto molto più facile, semplicemente utilizzando il "costruire" -.> "Rigenera soluzione" menu (perché ciò che la ricostruzione in realtà non fa altro che cancellare il obj / Debug cartella e poi la soluzione build)

sto usando questa soluzione sulla pagina MS Collegare per questo errore. Pulisce tutti i file OBJ e temporanei sotto il vostro progetto (tutte le configurazioni) prima di eseguire AspNetCompiler.

  

Modifica le MvcBuildViews obiettivo per   il file di progetto in modo che dipende   sugli obiettivi che pulire il   Imballaggi file che Visual Studio ha   creato. Tali obiettivi sono compresi nel   progetti di applicazione web   automaticamente.

     

Tutti i file di confezionamento sarà cancellato   ogni volta che i MvcBuildViews   Esegue di destinazione.

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

Questo problema si verifica quando non v'è uscita progetto web (web.config su modelli o temporaneo pubblicare file) nella cartella obj. Il compilatore ASP.NET utilizzato non è abbastanza intelligente da ignorare roba nella cartella obj, quindi genera errori, invece.

Un altro fix è quello di bombardare il diritto di uscita pubblicare prima di chiamare . Aprire il Csproj e cambiare questo:

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

a questo:

<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>

Questo eliminerà tutti i web.configs sotto \ obj, così come tutte le cartelle PackageTmp sotto \ obj.

Se si utilizza Pubblica Web, è possibile impostare MvcBuildViews=false e PrecompileBeforePublish=true, che precompiles dopo la copia nella cartella temporanea (immediatamente prima della pubblicazione / pacchetto).

NOTA: PrecompileBeforePublish è supportata solo dalla "nuova" Web Publishing Pipeline pila (VS2010 SP1 + Azure SDK o VS2012 RTM). Se stai usando VS2010 RTM, userete bisogno di uno dei metodi alternativi.

Per quanto riguarda la soluzione jrummell, l'impostazione:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

funziona in VS 2010 , ma non in VS 2012 . Nel 2012 devi mettere:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

Fonte:

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.Web.Publishing.targets

So che questo è stato risposto, ma volevo solo aggiungere qualcosa di interessante che ho trovato.

I aveva messo le "MvcBuildViews" a false nel progetto, cancellati tutti i bin e obj cartelle e mi è stato ancora ottenere l'errore. Ho scoperto che c'era un file ".csproj.user" che ancora aveva 'MvcBuildViews' impostata su true.

ho cancellato il file ".csproj.user" e poi tutto ha funzionato.

Quindi assicuratevi se si modifica il file csproj che o cambiare o eliminare il file ".csproj.user" anche.

Ho avuto questo problema e, in modo ho creato un evento pre-generazione nelle proprietà del progetto per pulire la directory di output (${projectPath}\bin,${projectPath}\obj\${ConfigurationName}). Su un altro progetto mi è stato anche sempre questo errore, anche con l'evento di pulizia al suo posto. Il secondo progetto che stava compilando i punti di vista, come elencati nel file di progetto:

<MvcBuildViews>true</MvcBuildViews>

ho cambiato il vero al falso, e si lamentava più su questo errore, ma ancora eseguito correttamente. Non voglio affermare che so esattamente cosa stava causando il secondo errore, ma almeno mi ha fatto andare avanti per il momento.

Il problema ha a che fare con i file intermedi, ma non v'è un'altra soluzione che consiste nel ripulire i file intermedi prima builnding i punti di vista.

Questa soluzione è stata inclusa in una qualche versione di VS, ma posso solo dire che ho avuto il problema in VS 2013 Aggiornamento 5. (vedere la "Beware" di seguito, potrebbe essere fissato in questa versione, ma non funziona solo nel mio caso particolare non standard).

ho preso in prestito il soltuion da errore : allowDefinition = 'MachineToApplication' oltre il livello di applicazione su Visual Studio Collegare

.

La soluzione consiste nell'includere queste righe al progetto di applicazione web (file .csproj) che gestiscono la cancellazione dei file intermedi offedning:

<!--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>

Attenzione: , per qualche motivo, probabilmente perché ho incluso io stesso nel progetto, il mio obiettivo di generazione per costruire il punto di vista è stato nominato "BuildViews", invece di "MvcBuildViews", così ho dovuto modificare l'attributo BeforeTargets conseguenza . Ho anche semplificato il target, rimuovendo il PropertyGroup e semplificando la condizione, in questo modo:

  <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>

Nel mio caso ho visto che quando ho MvcBuildViews e PrecompileDuringPublish sia come vere -. Era quello che stava causando questo problema

Così ho tolto il PrecompileDuringPublish e che la soluzione lavorato per me e non ho affrontato questo problema da allora.

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top