Problem dotyczy plików pośrednich, ale istnieje inne rozwiązanie polegające na wyczyszczeniu tych plików pośrednich przed zbudowaniem widoków.
To rozwiązanie zostało zawarte w niektórych wersjach VS, ale mogę tylko powiedzieć, że miałem problem w VS 2013 Update 5. (Zobacz "Uwaga" poniżej, można to naprawić w tej wersji, ale nie działa tylko w moim przypadek niestandardowy).
Rozwiązanie pożyczyłem od Error: allowDefinition = 'MachineToApplication' poza poziomem aplikacji w Visual Studio Connect.
Rozwiązanie polega .csprojna dołączeniu tych wierszy do projektu ( pliku) aplikacji internetowej, które obsługują usuwanie gotowych plików pośrednich:
<!--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>
Uwaga: z jakiegoś powodu, prawdopodobnie dlatego, że włączyłem go sam do projektu, mój cel kompilacji do budowania widoków został nazwany "BuildViews"zamiast "MvcBuildViews", więc musiałem odpowiednio zmodyfikować BeforeTargetsatrybut. Uprościłem też cel, usuwając PropertyGroupi upraszczając warunek, na przykład:
<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>