【问题标题】:How to execute msbuild /t:updateuid for all projects in a solution?如何为解决方案中的所有项目执行 msbuild /t:updateuid?
【发布时间】:2016-08-29 16:55:40
【问题描述】:
是否有一种简单的方法可以为解决方案中的所有项目执行msbuild /t:updateuid <project file>?
我有一个包含 150 多个项目的庞大解决方案,并希望将 Uid 设置为解决方案中所有项目中的所有 *.xaml 文件。我不想将这一行添加到每个项目中,而是从一个地方执行它。因此,我可以轻松控制命令的执行。
例如,在开发阶段,我想禁用该命令以加快构建过程,而在测试阶段之前,我想从一个地方启用它。欢迎提出任何建议。
问候
【问题讨论】:
标签:
c#
wpf
build
localization
msbuild
【解决方案1】:
我设法使用this 博客上的信息解决了我的问题。
这个想法是注入一个自定义的.targets 文件,该文件将由 msbuild 为每个项目处理。假设我们有以下解决方案结构:
- 解决方案文件夹
- 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=""$(MSBuildToolsPath)\msbuild.exe" /t:updateuid "$(MSBuildProjectFullPath)""/>
<Exec Command=""$(MSBuildToolsPath)\msbuild.exe" /t:checkuid "$(MSBuildProjectFullPath)""/>
</Target>
</Project>