我刚刚将包含 VC++( native 和托管)项目以及 C# 项目的软件从 .NET 3.5 迁移到 4.0。我们使用 MsBuild 构建,现在享受 MsBuild 4.0 的好处,它现在以相同的方式对待 C# 和 C++ 项目。有一个问题,但到目前为止我无法解决。
我正在使用 TargetOutputs ItemGroup 进一步处理生成的二进制文件。这适用于 C# 和托管 C++(clr 支持),但即使项目构建正确, native C++ 程序集(无公共(public)语言运行时支持)也不会放置在此 ItemGroup 中。
这是使用中的语句,之后@(MyProjectsOutput) 不包含 native C++ 程序集。
<MSBuild Projects="@(MyProjects)" Targets="Rebuild" Properties="Platform=x64;Configuration=Release">
<Output TaskParameter="TargetOutputs" ItemName="MyProjectsOutput" />
</MSBuild>
知道可能是什么原因吗?我被困在这里...... 提前致谢。
埃里克
最佳答案
经过更多调查,我创建了一个空的 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 更改为“公共(public)语言运行时支持 (/clr)”时,输出会正确显示。它似乎是 MsBuild 中的错误。
关于c++ - MsBuild 任务不会将 native C++ 输出放在 TargetOutputs ItemGroup 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190562/