Sorunun ara dosyalarla ilgisi var, ancak görünümleri oluşturmadan önce bu ara dosyaları temizlemekten oluşan başka bir çözüm var.
Bu çözüm VS'nin bazı sürümlerinde eklenmiştir, ancak sorunu yalnızca VS 2013 Güncelleme 5'te yaşadığımı söyleyebilirim ( Aşağıdaki "Dikkat" bölümüne bakın, bu sürümde düzeltilebilir, ancak yalnızca benim özelde çalışmıyor standart olmayan durum).
Çözümü , Visual Studio Connect'teki uygulama seviyesinin ötesinde Hata: allowDefinition = 'MachineToApplication' bölümünden ödünç aldım .
Çözüm, bu satırları .csproj
, offedning ara dosyaların silinmesini işleyen web uygulaması projesine ( dosya) dahil etmekten oluşur:
<!--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>
Dikkat: Bazı nedenlerden dolayı, muhtemelen onu projeye kendim dahil ettiğim için, görünümleri oluşturmak için inşa hedefime "BuildViews"
bunun yerine adı verildi "MvcBuildViews"
, bu yüzden BeforeTargets
niteliği buna göre değiştirmek zorunda kaldım . Ayrıca PropertyGroup
koşulu kaldırarak ve basitleştirerek hedefi basitleştirdim, şöyle:
<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>