Vấn đề liên quan đến các tệp trung gian, nhưng có một giải pháp khác bao gồm việc dọn dẹp các tệp trung gian đó trước khi tạo chế độ xem.
Giải pháp này đã được đưa vào một số phiên bản của VS, nhưng tôi chỉ có thể nói rằng tôi đã gặp sự cố trong VS 2013 Update 5. (Xem phần "Lưu ý" bên dưới, nó có thể được khắc phục trong phiên bản này, nhưng không hoạt động chỉ trong trường hợp cụ thể của tôi trường hợp phi tiêu chuẩn).
Tôi đã mượn lời giải thích từ Error: allowDefinition = 'MachineToApplication' vượt quá mức ứng dụng trên Visual Studio Connect.
Giải pháp bao gồm việc đưa các dòng này vào dự án ứng dụng web ( .csproj
tệp) để xử lý việc xóa các tệp trung gian bị bỏ sót:
<!--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>
Lưu ý: vì một số lý do, có thể là do tôi tự đưa nó vào dự án "BuildViews"
, thay vì đặt tên cho mục tiêu xây dựng của tôi để xây dựng các khung nhìn , vì "MvcBuildViews"
vậy tôi phải sửa đổi BeforeTargets
thuộc tính cho phù hợp. Tôi cũng đã đơn giản hóa mục tiêu, bằng cách loại bỏ PropertyGroup
và đơn giản hóa điều kiện, như sau:
<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>