12

機能を切り替えるためにいくつかの #define フラグを変更して、同じソリューション構成で同じプロジェクトを 2 回ビルドしたいと考えています。両方のバイナリが異なる名前でデプロイされます。

私が知っている解決策は次のとおりです。

  1. ソリューション構成を追加します - ただし、ソリューションを 2 回ビルドする必要がありますが、これは避けたいと思います。どちらのプロジェクト構成も常にビルドされます。

  2. プロジェクトをコピーする - しかし、別の構成のみを維持したい場合、新しいプロジェクトを維持するオーバーヘッドがあります。

  3. バッチ ビルド - ローカル開発には devenv を使用し、継続的インテグレーションには msbuild を使用するため、バッチ ビルドは使用しません。

他のアイデアや提案はありますか?

4

1 に答える 1

6

あなたが求めたことを実行する方法を見つけただけです。msbuild ファイルを 1 つ作成し (私は multiple.proj という名前を付けました)、以下のスクリプトを追加します。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Choose>
    <When Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
      <ItemGroup>
        <ProjectToBuild Include="$(MSBuildProjectName).csproj">
          <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
      </ItemGroup>
    </When>
  </Choose>
  <Target Name="BeforeBuild">
    <Message Text="Building configuration $(Configuration)..." />
  </Target>
  <Target Name="AfterBuild">
    <MSBuild Projects="@(ProjectToBuild)"/>
  </Target>
</Project>

</type>
</this>

プロジェクト (csproj または vbproj) にスクリプトをインポートします。

<Import Project="..\multiple.proj" />

このスクリプトは、msbuild に、AfterBuild イベントとして別の構成でプロジェクトを再度ビルドするように指示します。この例を作成するために Debug/Release を使用しましたが、他の構成をサポートするようにスクリプトを簡単に変更したり、他の変数に基づいて再度ビルドするかどうかを決定したりできます。

一度に 2 つのビルドを実行しているため、ビルド エラーが理解しにくくなるため注意してください。

お役に立てれば。

于 2013-01-17T20:40:07.707 に答える