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