問題は中間ファイルに関係していますが、ビューを作成する前にこれらの中間ファイルをクリーンアップするという別の解決策があります。
このソリューションは一部のバージョンのVSに含まれていますが、VS 2013 Update 5で問題があったとしか言えません(以下の「注意」を参照してください。このバージョンでは修正できますが、特定のバージョンでのみ機能するわけではありません)非標準の場合)。
Error:allowDefinition = 'MachineToApplication'の解決策をVisual Studio Connectのアプリケーションレベルを超えて借りました。
解決策は.csproj
、関連する中間ファイルの削除を処理するWebアプリケーションプロジェクト(ファイル)に次の行を含めることです。
<!--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>