提取MSBuild参数

时间:2014-03-21 11:44:20

标签: c# .net msbuild

我有一个像这样的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#代替吗?

2 个答案:

答案 0 :(得分:0)

您可以让项目输出值,然后使用脚本/ C#/ ....

解析它

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

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

它将在Build目标后自动调用。 然后在命令行上:

>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

答案 1 :(得分:0)

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

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

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

  

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