【问题标题】:MsBuild task does not place native C++ output in TargetOutputs ItemGroupMsBuild 任务不会将本机 C++ 输出放入 TargetOutputs ItemGroup
【发布时间】:2012-06-26 18:44:34
【问题描述】:

我刚刚将包含 VC++(本机和托管)项目以及 C# 项目的软件从 .NET 3.5 迁移到 4.0。我们使用 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>

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

埃里克

【问题讨论】:

    标签: c++ msbuild


    【解决方案1】:

    您可以在 MSBuild 任务上使用GetNativeTargetPath 目标名称来获取本机 C++ 项目的输出文件路径:

        <MSBuild Projects="my.vcxproj" Targets="GetNativeTargetPath">
            <Output ItemName="MyOutput" TaskParameter="TargetOutputs"/>
        </MSBuild>
    

    【讨论】:

      【解决方案2】:

      经过进一步调查,我创建了一个空的 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 中的一个错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2014-07-02
        • 1970-01-01
        • 2012-10-12
        相关资源
        最近更新 更多