2012-10-08 12 views
5

Nel mio progetto Asp.Net MVC 4, ho impostato il file .csproj per creare la vista <MvcBuildViews>true</MvcBuildViews>. Il problema è che la costruzione del progetto ho ottenuto l'errore:allowDefinition = impostazione errore 'MachineToApplication' <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.

ho cercato di eliminare la cartella obj ma l'innalzamento errore di mastio. L'errore specificare che il problema è nella riga tag di autenticazione:

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

Spesso, sono in grado di eseguire l'applicazione che esegue l'applicazione (ho ottenuto l'errore), costruendo l'applicazione e poi correre di nuovo.

+0

Controllare: http://stackoverflow.com/questions/4725387/mvcbuildviews-not-working-correctly –

risposta

1

ho avuto lo stesso problema quando si cerca di pubblicare la mia applicazione web dopo aver attivato MvcBuildViews per convalidare la mia sintassi Razor

ho trovato questo codice nel mio web config

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

Provare a commentare fuori, in modo da che il comportamento del compilatore non viene modificato

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

Fare ciò che suggerisce @matrixugly risolverà il problema, ma causerà anche la vista in fase di compilazione il controllo per s funzionando meglio. Suppongo che tu voglia ancora controllare i tuoi errori durante la compilazione? Se questo è il caso, migliori soluzioni di seguito.

Al fine di comprendere il motivo per cui queste soluzioni funzionano, dobbiamo prima sapere come viene creato il problema:

  1. Lo sviluppatore vuole compilazione che controlla tempo sulla vista, in modo da impostare MvcBuildViews=true.
  2. L'applicazione si sviluppa bene, fino a quando non pubblicano il progetto.
  3. Successivi tentativi di costruire il risultato del progetto in un errore di compilazione: 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.

Così che cosa causa questo problema? Quando il progetto viene pubblicato il compilatore, per impostazione predefinita utilizza <project-dir>\obj\ per posizionare le copie dei file di origine con cui funzionerà. Sfortunatamente, questi file non vengono automaticamente cancellati quando la pubblicazione è completa. La volta successiva che lo sviluppatore compila il progetto con MvcBuildViews=true, si verificherà un errore perché il compilatore di aspnet include la cartella obj\ durante la compilazione, poiché si trova sotto la cartella <project-dir>.

Quindi, come possiamo risolvere questo? Bene, hai quattro opzioni:

  1. Set MvcBuildViews=false. Non considero davvero questa una soluzione, quindi andiamo avanti.
  2. Elimina i file in <project-dir>\obj\. Funziona, ma può essere una seccatura dal momento che deve essere fatto dopo ogni pubblicazione.
  3. Modificare il percorso utilizzato dalla pubblicazione come directory intermedia mediante l'utilizzo della proprietà nel file di configurazione del progetto.

    Esempio (Ref: this link):

    <BaseIntermediateOutputPath> [SomeKnownLocationIHaveAccessTo] </BaseIntermediateOutputPath>

  4. Aggiungere una nuova sezione nel file di configurazione di progetto che elimina i file incriminati per voi su build (riferimento Microsoft Connect). Ho anche fatto più facile per voi, basta copiare e incollare:

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

Il mio consiglio sarebbe quello di utilizzare l'opzione 3 o 4.

N.B. Per coloro che non hanno mai modificato il loro file di progetto, non è possibile modificarlo mentre caricato. Per prima cosa è necessario scaricarlo facendo clic con il pulsante destro del mouse e selezionando Unload Project. È quindi possibile fare clic con il tasto destro del mouse sul progetto e modificare il file di progetto. In alternativa, puoi modificare il file all'esterno di Visual Studio.

Problemi correlati