4

組織内の複数のアプリケーション間で使用されるクラス ライブラリのファミリを作成しようとしています。これらのアプリケーションには、.NET 3.5 をターゲットにするものと 4.0 をターゲットにするものがあります。

ホスト アプリケーションが最も適切なアセンブリを選択できるように、アセンブリの 2 つのバージョン (1 つは 3.5 を対象とし、もう 1 つは 4.0 を対象とする) を提供したいと考えています。

バージョン 3.5 と 4.0 の間には、いくつかの微妙な違いがあります。

  • 一部のクラスは、.NET 4.0 バージョンに取って代わられたために削除されました。
  • .NET 4.0 で導入されたクラスの操作を支援するために、いくつかのクラスが追加されました。
  • 4.0 バージョンでは、4.0 で拡張されたスレッド サポートの一部を利用するために、一部のクラスが変更されています。

コードベースの重複部分を再利用し、ソース ツリーを単純にフォークしないようにするソリューションはありますか?

私の目的は、指定されたフレームワークを対象とするアセンブリの複数のバージョンを生成し、NuGet パッケージにまとめて内部フィードで公開できるようにすることです。

4

3 に答える 3

6

これは、条件付きコンパイラ指令の仕事のように聞こえます。

次のコードを使用してコードをペッパーします。

#If NET35
...
#End If

#If NET40
...
#End If

ここから、プロジェクトに定数NET35NET40コンパイル定数を追加する必要があります。まず、構成マネージャーで、、、、などのカスタム構成を作成することをおDebugNET35勧めDebugNET40ReleaseNET35ますReleaseNET40。これらの構成が作成されたら、各構成に切り替えて、プロジェクトの[高度なコンパイルオプション]に移動します。ここで、現在の構成に応じて、カスタム定数NET35またはを設定できます。NET40

このダイアログボックスでターゲットフレームワークを設定することもできますが、フレームワークのバージョンがグローバルに設定されます。構成ごとにカスタムターゲットフレームワークを設定するには、Pierreの手順に従います。

その後、構成を選択してコンパイルします。この手法を使用して、アプリケーションの「デモ」バージョンと「フル」バージョンで同じコードベースを共有しました。

うまくいけば、Visual Studioの将来のバージョンには、フレームワークバージョン定義が自動的に含まれるようになります:https ://connect.microsoft.com/VisualStudio/feedback/details/113323/include-framework-version-defines-automatically

編集: .NET Frameworkブログに、Visual Studio 2010および2012でのポータブルコードライブラリの記述について説明した新しい記事があります:http: //blogs.msdn.com/b/dotnet/archive/2012/07/06/targeting-multiple -platforms-with-portable-code-overview.aspxであり、これははるかにクリーンなソリューションのように見えます。

于 2012-06-15T14:58:45.740 に答える
3

これを行うためのより良い方法があるかもしれませんが、異なるプラットフォームをターゲットにする場合は次のことを行いました. (XNA を使用する Xbox と PC の比較)

構成で異なるプラットフォーム ターゲットを使用して複数の *.csproj を作成します。たとえば、単一のプロジェクトの場合、.NET 3.5 用と .NET 4.0 用の 2 つの *.csproj ファイルがあります。

構成マネージャーでは、リリースごとに異なるプラットフォームをセットアップします。*.csproj(s) は、実際には同じファイルを参照しています。コードの一部が .NET 3.5 と .NET 4.0 の両方を対象とするように、ビルド条件シンボルを設定することもできます。さらに、ファイル全体を書き直す必要がある場合、*.csproj(s) は独自のファイルを参照します。

于 2012-06-15T14:55:36.193 に答える
1

複数の .NET フレームワーク (および/またはプラットフォーム) をサポートするクラス ライブラリのファミリを作成することを計画している場合は、「ポータブル クラス ライブラリ」を作成することをお勧めします。

詳細については、ブログ投稿、Portable Code を使用した複数のプラットフォームのターゲット設定 (概要) を参照してください。Visual Studio 2012 では、新しい "Portable Class Library" プロジェクトを作成するだけですが、Visual Studio 2010 では最初にPortable Library Toolsをインストールする必要があります。

PCL プロジェクトでは、次のプラットフォームをターゲットにすることができます。

  • .NET Framework 4、4.0.3、および 4.5
  • Metro スタイル アプリ用の .NET (これには Windows Phone 8 と Windows 8 RT が含まれると思われます)
  • Windows Phone 7.x
  • Silverlight 4 および 5
  • Xbox360

ただし、現在、.NET Framework 3.5 はこのリストに含まれていないことに注意してください。ポータブル ライブラリ ツールは、他のプラットフォームを将来追加できるように作成されており、現在は Mono サポートがリストの一番上にあります。

于 2012-07-10T14:49:04.147 に答える