Проблема пов'язана з проміжними файлами, але є ще одне рішення, яке полягає в очищенні цих проміжних файлів перед тим, як створити представлення даних.
Це рішення було включено до деякої версії VS, але я можу лише сказати, що у мене виникла проблема в оновлення 5. VS 2013 (дивіться "Обережно" нижче, це могло бути виправлено у цій версії, але не працює лише в моїй конкретній нестандартний випадок).
Я запозичив soltuion у Error: enableDefinition = 'MachineToApplication' поза рівнем програми на Visual Studio Connect.
Рішення полягає у включенні цих рядків до проекту ( .csproj
файлу) веб-додатків, який обробляє видалення проміжних файлів, що відступають:
<!--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>
Остерігайтеся: чомусь, мабуть, тому, що я сам включив його в проект "BuildViews"
, замість цього було названо мою ціль побудови для побудови поглядів "MvcBuildViews"
, тому мені довелося відповідно змінити BeforeTargets
атрибут. Я також спростив ціль, видаливши PropertyGroup
та спростивши умову, наприклад:
<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>