MsBuild任务不会在TargetOutputs ItemGroup中放置本机C ++输出

时间:2012-06-25 13:50:33

标签: c++ msbuild

我刚刚迁移了一个包含VC ++(本机和托管)项目的软件以及从.NET 3.5到4.0的C#项目。我们使用MsBuild构建,现在我们享受了MsBuild 4.0的好处,它现在以同样的方式处理C#和C ++项目。有一个问题,但到目前为止我无法解决。

我正在使用TargetOutputs ItemGroup来进一步处理生成的二进制文件。这适用于C#和托管C ++(clr支持),但是即使项目构建正确,本机C ++程序集(无公共语言运行时支持)也不会放在此ItemGroup中。

这是正在使用的语句,之后@(MyProjectsOutput)不包含本机C ++程序集。

<MSBuild Projects="@(MyProjects)" Targets="Rebuild" Properties="Platform=x64;Configuration=Release">
  <Output TaskParameter="TargetOutputs" ItemName="MyProjectsOutput" />
</MSBuild>

知道可能是什么原因?我被困在这里...... 提前谢谢。

埃里克

2 个答案:

答案 0 :(得分:0)

经过一番调查,我创建了一个空的C ++控制台应用程序和这个简单的MsBuild脚本:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Build" Outputs="" Condition="">
    <ItemGroup>
      <MyProjects Include="test\test.vcxproj">
      </MyProjects>
    </ItemGroup>
    <MSBuild Projects="@(MyProjects)">
      <Output TaskParameter="TargetOutputs" ItemName="MyProjectsOutput" />
    </MSBuild>
    <Message Importance="high" Text="MyProjects: @(MyProjects)"></Message>
    <Message Importance="high" Text="MyProjectsOutput: @(MyProjectsOutput)"></Message>
  </Target>
</Project>

test.exe已成功构建,但ItemGroup @(MyProjectOutput)仍未包含该文件。当我将test.vcxproj更改为“公共语言运行时支持(/ clr)”时,输出会正确显示。它似乎是MsBuild中的一个错误。

答案 1 :(得分:0)

您可以在MSBuild任务上使用cast(date_parse(concat(year, month, day), '%Y%m%d') as date) BETWEEN current_date - interval '7' day AND current_date 目标名称来获取本机C ++项目的输出文件路径:

GetNativeTargetPath