Das Problem hat mit den Zwischendateien zu tun, aber es gibt eine andere Lösung, die darin besteht, diese Zwischendateien vor dem Erstellen der Ansichten zu bereinigen.
Diese Lösung wurde in einige Versionen von VS aufgenommen, aber ich kann nur sagen, dass ich das Problem in VS 2013 Update 5 hatte. (Siehe "Vorsicht" unten, es könnte in dieser Version behoben werden, funktioniert aber nicht nur in meiner Version nicht standardmäßiger Fall).
Ich habe die Lösung von Error: allowDefinition = 'MachineToApplication' über die Anwendungsebene in Visual Studio Connect hinaus ausgeliehen.
Die Lösung besteht darin, diese Zeilen in das Webanwendungsprojekt ( .csproj
Datei) aufzunehmen, die das Löschen der angebotenen Zwischendateien behandeln:
<!--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>
Achtung: Aus irgendeinem Grund, wahrscheinlich weil ich es selbst in das Projekt aufgenommen habe, wurde mein Erstellungsziel zum Erstellen der Ansichten "BuildViews"
anstelle von benannt "MvcBuildViews"
, sodass ich das BeforeTargets
Attribut entsprechend ändern musste . Ich habe auch das Ziel vereinfacht, indem ich PropertyGroup
die Bedingung wie folgt entfernt und vereinfacht habe:
<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>