我刚刚迁移了一个包含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>
知道可能是什么原因?我被困在这里...... 提前谢谢。
埃里克
答案 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