4

アプリケーション内に、.NET3.5と.NET4.0の両方で使用できるコアライブラリをいくつか作成する必要があります。複数のプロジェクトを作成し、必要な定義を作成し、#ifdefどのコードをどの出力アセンブリに組み込むかを制御するために使用して満足しています。

しかし、私が知りたいのは、それらのプロジェクトの同期を維持する方法があるかどうかです。XNAで開発しているときは、WindowsビルドとWindows Phoneビルドがあります。XNAは、という名前のプロジェクトファイルにプロパティを挿入しますXnaCrossPlatformGroupID。これにより、Visual Studioは、ファイルがプロジェクトに追加されたときに、対応するプロジェクトにファイルが追加されることを自動的に確認できます。したがって、たとえば、Foo.csプロジェクトのWindowsコピーに呼び出されたファイルを追加すると、同じファイルがプロジェクトのWindowsPhoneコピーに追加されます。

Visual Studio内の通常のプロジェクトセットに対してそのような動作を複製する方法はありますか?IDEの外部のツール(たとえば、TeamCityなど)を使用せずに、対象となるすべてのプラットフォームを1つのステップでコンパイルできるようにするため、ビルド構成は使用しないことをお勧めします。または、20の異なるビルド構成でソリューションをペッパーすることなく、複数のターゲットに対してプロジェクトをビルドできる別の方法はありますか?

4

2 に答える 2

7

私がしていることは:

  • ほとんどの開発に使用する「通常の」csprojが1つあり、ファイルの追加などがありますが、実際にはすべてのファイルが「中に」あることを覚えておいてください。
  • 他のcsprojには、次のようなものを使用します。

    <ItemGroup>
      <Compile Include="..\Foo\**\*.cs" />
    </ItemGroup>
    

(これは基本的に「リンクとして追加」と同じですが、ファイルごとに実行する必要はありません)

これはすべての*.csファイルの再帰的なインクルードであるため、すべてが含まれています。ファイルのメンテナンスは必要ありません。


(複数のバージョンではなく)複数のフレームワークをターゲットにしようとしている場合、別のオプションは次のようになります。ポータブルクラスライブラリを使用します。これは、複数のフレームワークで機能する単一のプロジェクトですがターゲットとするプラットフォームの機能の厳密な共通部分に限定されています。VS2010では、これはアドイン機能です。VS11にはデフォルトで含まれています。

于 2012-07-23T20:40:43.203 に答える
0

クロスプラットフォームプロジェクトで私がしていることは、それぞれが1つのプラットフォームに異なるslnを持つことです。

共有コードは共通の場所にあり、正しいcsprojに「リンクとして」追加されます。このcsprojには、プラットフォーム固有のファイルも含まれています。「共通コード」ファイルが現在のプラットフォームに基づいて条件付きである必要がある場合は、それを2つのプラットフォーム固有のファイルに置き換えるか、#ifdefをその中に入れるかを選択できます(ファイルの違いの程度によって異なります)。

VisualStudio内で1つのソリューションを別のソリューションに追加することもできることに注意してください。この「組み合わせた」ソリューションは、すべてのプラットフォームの自動ビルドに使用できます。

例:https ://github.com/ananthonline/graffiti

これは私にとってはうまくいきます、YMMV。お役に立てれば。

于 2012-07-23T20:42:10.943 に答える