提取MSBuild参数

本文关键字:参数 MSBuild 提取 | 更新日期: 2023-09-27 17:51:10

我有一个这样的MSBuild文件:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <Param1>Hello world</Param1>
  </PropertyGroup>      
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <Param1>Goodbye world</Param1>
  </PropertyGroup>
</Project>

我正在处理一个外部应用程序,我需要能够找出Param1的配置值是什么。我需要一种方法来正确地评估MSBuild文件,以便应用任何条件,然后将正确的参数返回给调用应用程序。

能够做这样的事情将是伟大的:

>MSBuild /p:Configuration=Release MyBuild.proj  -extractParam:Param1
>Goodbye World

任何想法?这是否可以用c#代替?

提取MSBuild参数

您可以让项目输出值,然后使用脚本/c#/....解析它

将此目标添加到您的项目:

<Target Name="OutputParam1" AfterTargets="Build">
  <Message Text="Param1 = $(Param1)"/>
</Target>

将在构建目标之后自动调用。然后在命令行中:

>MSBuild /p:Configuration=Release MyBuild.proj /fl

,其中/fl导致生成文件msbuild.log,其中将包含一行

Param1 = Goodbye world

,因为Message任务。现在使用例如powershell输出匹配的部分:

>powershell -command "$a = Select-String -Path msbuild.log -Pattern 'Param1 = (.+)'; $a.Matches[0].Groups[1].Value"
>Goodbye world

您可以添加一个打印参数值的目标:

<Target Name="ExtractParam1" >
  <Message Text="$(Param1)" Importance="high" />
</Target>

开关/v:m /nologo使输出只打印值:

msbuild/p:Configuration=Release MyBuild。proj/t:ExtractParam1/v:m/nologo