Masalahnya berkaitan dengan file perantara, tetapi ada solusi lain yang terdiri dari membersihkan file perantara tersebut sebelum membangun view.
Solusi ini telah disertakan dalam beberapa versi VS, tetapi saya hanya dapat mengatakan bahwa saya memiliki masalah di Pembaruan VS 2013 5. (Lihat "Hati-hati" di bawah, ini bisa diperbaiki dalam versi ini, tetapi tidak hanya berfungsi di versi saya kasus non-standar).
Saya meminjam solusi dari Error: allowDefinition = 'MachineToApplication' melampaui level aplikasi di Visual Studio Connect.
Solusinya terdiri dari memasukkan baris-baris berikut ke proyek aplikasi web ( .csproj
file) yang menangani penghapusan file perantara yang offedning:
<!--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>
Hati-hati: untuk beberapa alasan, mungkin karena saya memasukkannya sendiri ke dalam proyek, target pembangunan saya untuk membangun tampilan dinamai "BuildViews"
, bukan "MvcBuildViews"
, jadi saya harus memodifikasi BeforeTargets
atribut yang sesuai. Saya juga menyederhanakan target, dengan menghapus PropertyGroup
dan menyederhanakan kondisinya, seperti ini:
<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>