ปัญหาเกี่ยวข้องกับไฟล์ระดับกลาง แต่มีอีกวิธีหนึ่งซึ่งรวมถึงการล้างไฟล์กลางเหล่านั้นก่อนที่จะสร้างมุมมอง
โซลูชันนี้รวมอยู่ใน VS บางเวอร์ชัน แต่ฉันสามารถพูดได้ว่าฉันมีปัญหาใน VS 2013 Update 5 เท่านั้น (ดู"ระวัง"ด้านล่างซึ่งสามารถแก้ไขได้ในเวอร์ชันนี้ แต่ใช้งานไม่ได้เฉพาะในรุ่นของฉันเท่านั้น กรณีที่ไม่ได้มาตรฐาน)
ฉันยืมการแก้ปัญหาจากError: allowDefinition = '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>