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:
- Lo sviluppatore vuole compilazione che controlla tempo sulla vista, in modo da impostare
MvcBuildViews=true
.
- L'applicazione si sviluppa bene, fino a quando non pubblicano il progetto.
- 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:
- Set
MvcBuildViews=false
. Non considero davvero questa una soluzione, quindi andiamo avanti.
- Elimina i file in
<project-dir>\obj\
. Funziona, ma può essere una seccatura dal momento che deve essere fatto dopo ogni pubblicazione.
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>
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.
Controllare: http://stackoverflow.com/questions/4725387/mvcbuildviews-not-working-correctly –