多くの開発者は、新しいバージョンで導入された機能を使用する際に、複数の .NET Framework バージョンをサポートする必要があるシナリオに遭遇します。一般的な例の 1 つは、.NET 3.0 で導入された拡張メソッドの利用です。ただし、.NET 2.0 をターゲットとするプロジェクトで拡張メソッドを使用する場合は、ExtensionAttribute クラスを定義する必要があります。これにより、フレームワークの上位バージョンをターゲットとする場合に競合が発生する可能性があります。
次のような疑問が生じます。 .NET 2.0用にコンパイルする場合にのみExtensionAttributeクラスを条件付きで含める方法は?その答えは、条件付きコンパイル ディレクティブを使用することにあります。
Visual Studio には、プリプロセッサ シンボルに基づいてコード ブロックを含めたり除外したりできる条件付きコンパイル ディレクティブが用意されています。 TargetFrameworkVersion プロパティは、ターゲット フレームワークのバージョンを示すプリプロセッサ シンボルの 1 つです。
条件付きコンパイル ディレクティブを使用するには、プロジェクトの .csproj ファイルの既存の DefineConstants の後に DefineConstants 要素を追加します。要素。例:
<DefineConstants> <DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">RUNNING_ON_4</DefineConstants> <DefineConstants Condition=" '$(TargetFrameworkVersion)' != 'v4.0' ">NOT_RUNNING_ON_4</DefineConstants> </DefineConstants>
上記のコードは 2 つの定数を定義します。.NET 4.0 をターゲットとする場合は RUNNING_ON_4、それ以外の場合は NOT_RUNNING_ON_4 です。
定数が定義されると、 #if を使用すると、条件付きでコード ブロックを含めたり除外したりできます。 #elseif および #else ディレクティブ。例:
class Program { static void Main(string[] args) { #if RUNNING_ON_4 Console.WriteLine("RUNNING_ON_4 was set"); #endif #if NOT_RUNNING_ON_4 Console.WriteLine("NOT_RUNNING_ON_4 was set"); #endif
このコードは、.NET 4.0 用にコンパイルすると「RUNNING_ON_4 が設定されました」を出力し、他のフレームワーク バージョンでは「NOT_RUNNING_ON_4 が設定されました」を出力します。
条件付きコンパイル ディレクティブを使用し、TargetFrameworkVersion に基づいて定数を定義するプリプロセッサ シンボルを使用すると、ターゲット フレームワークのバージョンに応じてコード ブロックを選択的に含めることができます。これにより、ビルド エラーや警告が発生することなく、.NET Framework の複数のバージョンをサポートできます。
以上がコンパイル時にターゲットの .NET Framework バージョンを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。