是否有一种简单的方法可以为解决方案中的所有项目执行msbuild /t:updateuid <project file>
?
我有超过150个项目的巨大解决方案,并希望将Uids设置为解决方案中所有项目中的所有* .xaml文件。我不想将这一行添加到每个项目中,而是从一个地方执行。因此,我可以轻松控制命令的执行。 例如,在开发阶段,我想禁用命令以使构建过程更快,并且在测试阶段之前我想从一个地方启用它。任何建议都很受欢迎。
此致
答案 0 :(得分:1)
我设法使用this博客上的信息解决了我的问题。
我们的想法是为每个项目注入一个自定义.targets
文件,该文件将由 msbuild 处理。想象一下,我们有以下解决方案结构:
after.MySolution.sln.targets
文件将由msbuild处理。它将为解决方案中的每个项目注入要执行的UpdateAutomationIds.targets
文件。只需将 MySolution 替换为解决方案的名称。
<强> after.MySolution.sln.targets 强>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CustomAfterMicrosoftCommonTargets>$(MSBuildThisFileFullPath)</CustomAfterMicrosoftCommonTargets>
<SolutionPath>$(SolutionPath);CustomAfterMicrosoftCommonTargets=$(MSBuildThisFileDirectory)UpdateAutomationIds.targets</SolutionPath>
</PropertyGroup>
</Project>
<强> UpdateAutomationIds.targets 强>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="UpdateAutomationIds" Condition="'$(MSBuildProjectExtension)'=='.csproj'" BeforeTargets="Build">
<Message Text="Updates automation ids. Project: $(MSBuildProjectFullPath)" Importance="high"/>
<Exec Command=""$(MSBuildToolsPath)\msbuild.exe" /t:updateuid "$(MSBuildProjectFullPath)""/>
<Exec Command=""$(MSBuildToolsPath)\msbuild.exe" /t:checkuid "$(MSBuildProjectFullPath)""/>
</Target>
</Project>