2011-03-01 15 views
10

Attualmente sto lavorando a un progetto MVC3 con Razor. Ho in corso la compilazione di Views per essere al corrente degli errori di ortografia ecc. In fase di compilazione.MVC3 Errore strano dopo l'attivazione della compilazione di viste

Appena accendo le <MvcBuildViews> vero </MvcBuildViews > nel file di configurazione progetti di ottenere il seguente errore durante la compilazione:

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

Ho letto diverse possibili soluzioni al problema, principalmente per quanto riguarda IIS e directory o applicazioni virtuali. Il problema è che non utilizzo IIS, ma utilizzo il server di sviluppo di Visual Studio predefinito.

Cosa posso fare per risolvere questo problema?

risposta

21

Ho provato molte soluzioni diverse disponibili nel Web, ma o non si adattavano perfettamente al mio problema o non funzionavano.

per ricapitolare il mio problema:

Dopo l'accensione CompileViews su, ho subito avuto l'errore di cui sopra durante la compilazione. Sto utilizzando il server di sviluppo Visual Studio predefinito di VS2010 per testare la mia app MVC.

Oggi ho aperto una richiesta al supporto sviluppatori di Microsoft, e - quasi mi vergogno ad ammetterlo - ha ottenuto la mia risposta a circa 30 secondi dall'inizio del richiamata dal tecnico:

Tutto quello che disse fu: Si prega di goto tua cartella obj e cancella tutti i contenuti. Quindi compilare di nuovo.

E quello è stato davvero tutto.

Quindi dopo un sacco di scottature su di me volevo condividere i risultati con voi.

+0

Grazie per la registrazione qui. Ho appena incontrato la stessa cosa e mi stavo già grattando la testa perché un cambiamento così semplice potesse avere questo effetto. – Rudi

+0

Ho ricevuto lo stesso errore in seguito a una configurazione diversa dalla descrizione originale. Ma cancellare la cartella obj ha risolto anche il mio problema. Grazie per aver condiviso la soluzione, è ancora rilevante quasi un anno dopo. –

+0

super soluzione.Mi hai salvato la giornata :) –

3

Questo problema si verifica quando è presente un output del progetto Web (file web.config basato su modello o file di pubblicazione temporanei) nella cartella obj. Il compilatore ASP.NET utilizzato non è abbastanza intelligente da ignorare elementi nella cartella obj, quindi genera errori.

Un'altra correzione consiste nell'applicare l'output di pubblicazione immediatamente prima di chiamare <AspNetCompiler>. 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> 

che verranno eliminati tutti web.configs sotto \ obj, così come tutte le cartelle PackageTmp sotto \ obj.

+0

Questa è la soluzione migliore a mio parere. A differenza degli altri, non richiede di eseguire un passaggio manuale per eliminare la cartella obj e impedisce al compilatore di ricompilare l'intero progetto. – Carsten