如何为解决方案中的所有项目执行msbuild / t:updateuid?

时间:2016-05-04 10:06:04

标签: c# wpf build localization msbuild

是否有一种简单的方法可以为解决方案中的所有项目执行msbuild /t:updateuid <project file>

我有超过150个项目的巨大解决方案,并希望将Uids设置为解决方案中所有项目中的所有* .xaml文件。我不想将这一行添加到每个项目中,而是从一个地方执行。因此,我可以轻松控制命令的执行。 例如,在开发阶段,我想禁用命令以使构建过程更快,并且在测试阶段之前我想从一个地方启用它。任何建议都很受欢迎。

此致

1 个答案:

答案 0 :(得分:1)

我设法使用this博客上的信息解决了我的问题。 我们的想法是为每个项目注入一个自定义.targets文件,该文件将由 msbuild 处理。想象一下,我们有以下解决方案结构:

  • SolutionFolder
    • MySolution.sln
    • after.MySolution.sln.targets
    • UpdateAutomationIds.targets

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="&quot;$(MSBuildToolsPath)\msbuild.exe&quot; /t:updateuid &quot;$(MSBuildProjectFullPath)&quot;"/>
    <Exec Command="&quot;$(MSBuildToolsPath)\msbuild.exe&quot; /t:checkuid &quot;$(MSBuildProjectFullPath)&quot;"/>
  </Target>
</Project>