3

Teambuildでビルドするソリューションは2つあります。1つはアプリケーション自体で、もう1つはWiXインストーラーです。「AnyCPU」ビルド構成を使用してアプリケーションをビルドし、「x86」を使用してインストーラーをビルドしたい。プロジェクトファイルの最初に「AnyCPU」ソリューションをリストしましたが、Teambuildは常に「x86」ソリューションを最初にビルドします。

BuildSolutionsInParallel = falseを設定していますが、それでもソリューションは逆の順序でビルドされます。最初のソリューションを「混合プラットフォーム」に変更すると、正常に機能します。プロジェクトファイルにリストされている順序でソリューションをビルドするにはどうすればよいですか?

<Project ...>
<PropertyGroup>
  <!-- We want to build the install solution after the build solution -->
  <BuildSolutionsInParallel>false</BuildSolutionsInParallel>
</PropertyGroup>

<ItemGroup>
  <SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.sln">
    <Targets></Targets>
    <Properties></Properties>
  </SolutionToBuild>
  <SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.Install/Pricer.Install.sln">
    <Targets></Targets>
    <Properties></Properties>
  </SolutionToBuild>
</ItemGroup>

  <ItemGroup>
    <ConfigurationToBuild Include="Release|Any CPU">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>Any CPU</PlatformToBuild>
    </ConfigurationToBuild>
    <ConfigurationToBuild Include="Release|x86">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>x86</PlatformToBuild>
    </ConfigurationToBuild>
  </ItemGroup>
</Project>
4

4 に答える 4

2

ここでの問題は、任意の CPU が慣例により、他の構成とは少し異なる方法で処理されることです。たとえば、出力ディレクトリ階層から除外されます。チーム ビルドのターゲット ファイルには、ComputeConfigurationList というターゲットがあります。

<ItemGroup>
  <!-- ConfigurationList for any Platform but Any CPU -->
  <ConfigurationList Condition=" '%(ConfigurationToBuild.PlatformToBuild)' != 'Any CPU' " Include="$(MSBuildProjectFile)">
    <Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\;TeamBuildPublishDir=$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\</Properties>
  </ConfigurationList>
  <!-- ConfigurationList for Any CPU Platform -->
  <ConfigurationList Condition=" '%(ConfigurationToBuild.PlatformToBuild)' == 'Any CPU' " Include="$(MSBuildProjectFile)">
    <Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\;TeamBuildPublishDir=$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\</Properties>
  </ConfigurationList>
</ItemGroup>

このターゲットは、受信した ConfigurationToBuild 項目グループを 2 つのバッチ (任意の CPU とその他すべて) で処理します。したがって、結果として得られる ConfigurationList アイテム グループは、元の ConfigurationToBuild アイテム グループとは異なる方法で並べ替えられ、すべてのAny CPU 構成の後にすべての Any CPU 構成が配置されます。

構成の順序が重要な場合の回避策は、すべてのソリューションに対して新しいソリューション構成を定義することです。これに関する手順については、上記のブログ投稿を参照してください。たとえば、Any CPU ソリューションの Any CPU に基づいた TFS と呼ばれる構成を定義し、それらのソリューションの Win32 に基づいた構成を定義できます。次に、TfsBuild.proj ファイルで、ConfigurationToBuild 項目グループにこの 1 つの構成のみを含めます。これにより、TFS ビルドが任意の CPU の Win32 構成をビルドしようとしたときに、おそらく現在表示されているさまざまな「無効な構成」の警告が取り除かれ、その逆も同様です。

于 2009-07-23T12:09:40.833 に答える
2

プロジェクトのビルド順序は、同じソリューションに属するプロジェクトに対して設定できます。この場合、無関係な理由により、プロジェクトは 2 つの異なるソリューションに属する必要があります。

ここで、「混合プラットフォーム」ソリューションの C# プロジェクトは「任意の CPU」としてビルドされることを発見したため、解決策は Teambuild プロジェクト ファイルで常に「混合プラットフォーム」を使用することです。

于 2009-05-11T07:07:55.960 に答える
0

同じ問題のように見えますが、AnyCPU とは関係がないため、同様の質問を投稿しました。これは解決されましたか?

Tfs2010 が何よりも先に Wix プロジェクトをビルドするのはなぜですか?

于 2010-04-16T22:18:14.897 に答える
0

わかりました、Teambuild と同じかどうかはわかりませんが、「Project -> Project Build Order」でプロジェクトのビルド順序を設定するのはどうですか?

于 2009-05-07T04:47:16.113 に答える