4

私はライブラリを書いていますIReadOnlyList<T>。可能であれば、実装して利用するクラスが必要です。ただし、そのインターフェイスはフレームワーク バージョン 4.5 以降でのみ使用可能であり、この 1 つのインターフェイスのためだけにそのバージョンに縛られたくありません。

ライブラリの 2 つのバージョンを自動的にコンパイルする方法はありますか?

例として、「このライブラリを2つの[またはそれ以上の]バージョンでコンパイルする」というMSBuild構成のようなものを探しており、定義されたシンボル、フレームワーク、参照など、それぞれに異なるオプションを指定しています.

これが可能であれば、私が抱えていた他の多くの同様の問題を実際に解決できる可能性があります.

4

2 に答える 2

4

異なるフレームワーク バージョンを対象とする 2 つのバージョンのプロジェクト ファイルを作成できます。この場合、すべてのプロジェクト ファイルを既存のプロジェクト ディレクトリに配置します。

各プロジェクトで、(必要に応じて) フレームワークのバージョンを示すシンボルを定義します (例: DOTNET45. これは、[プロパティ] - [ビルド] - [条件付きコンパイル シンボル]で実行できます。

#if次に、ディレクティブを使用できます:

class MyClass<T> : IList<T>
#if DOTNET45
    , IReadOnlyList<T>
#endif
{
    // Your usual code

    #if DOTNET45

    // IReadOnlyList implementation

    #endif
}

ただし、これは面倒になる可能性があります。別の方法として、部分クラスを使用することもできます。

partial class MyClass<T>
{
}

#if DOTNET45

partial class MyClass<T> : IReadOnlyList<int>
{
    // IReadOnlyList implementation
}

#endif

#if明らかに部分クラスもファイルに分割できるため、プロジェクトの .NET 4.5 バージョンにこの部分クラス ファイルのみを含めることで、完全になくても済む可能性があります。

于 2013-04-15T09:57:09.210 に答える