2

VC++ (ネイティブおよびマネージ) プロジェクトと C# プロジェクトを含むソフトウェアを .NET 3.5 から 4.0 に移行しました。私たちは MsBuild を使用してビルドし、C# と C++ のプロジェクトを同じ方法で扱うようになった MsBuild 4.0 の利点を享受しています。ただし、これまで解決できなかった問題が1つあります。

結果のバイナリをさらに処理するために、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>

何が原因でしょうか?ここでかなり立ち往生しています...よろしくお願いします。

エリック

4

2 に答える 2

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 を「Common Language Runtime Support (/clr)」に変更すると、出力が正しく表示されます。MsBuild のバグのようです。

于 2012-06-26T06:20:03.170 に答える