CMakeターゲット「Properties: Targets」における「VS_DOTNET_TARGET_FRAMEWORK_VERSION」の完全解説


"VS_DOTNET_TARGET_FRAMEWORK_VERSION" は、CMake の "Properties: Targets" におけるターゲット プロパティであり、C++/CLI プロジェクトの .NET ターゲット フレームワーク バージョンを指定するために使用されます。 このプロパティは、Visual Studio でプロジェクトを開く際に、適切なフレームワーク バージョンが選択されるようにします。

使用方法

"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、以下の形式で設定できます。

set_property(TARGET <target> PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "<version>")

ここで、

  • <version> は、.NET ターゲット フレームワーク バージョンを表す文字列です。 例えば、"v4.5" または ".NETStandard2.0" などを設定できます。
  • <target> は、プロパティを設定するターゲットの名前です。

以下の例は、"MyTarget" というターゲットの ".NET ターゲット フレームワーク バージョン" を "v4.5" に設定します。

set_property(TARGET MyTarget PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.5")

注意点

"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、CMake 3.29 以降では非推奨となっています。 代わりに、"DOTNET_TARGET_FRAMEWORK" または "DOTNET_TARGET_FRAMEWORK_VERSION" プロパティを使用することを推奨します。

"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、C++/CLI プロジェクトでのみ使用できます。 .NET Core または .NET Standard プロジェクトの場合は、"DOTNET_TARGET_FRAMEWORK" または "DOTNET_TARGET_FRAMEWORK_VERSION" プロパティを使用する必要があります。



cmake_minimum_required(VERSION 3.29)

project(MyProject)

set(SOURCE_FILES MyProject.cpp)

add_executable(MyTarget ${SOURCE_FILES})

target_link_libraries(MyTarget MyLib)

set_property(TARGET MyTarget PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.5")

このコードでは、以下の処理が行われています。

  1. CMake の最小バージョンを 3.29 に設定します。
  2. "MyProject" という名前のプロジェクトを作成します。
  3. ソースファイル "MyProject.cpp" を指定します。
  4. "MyTarget" という名前の実行可能ファイルを作成します。
  5. "MyTarget" に "MyLib" ライブラリをリンクします。
  6. "MyTarget" の ".NET ターゲット フレームワーク バージョン" を "v4.5" に設定します。

このコードを実行すると、Visual Studio で "MyProject" プロジェクトを開いたときに、".NET ターゲット フレームワーク" が "v4.5" に自動的に設定されます。

  • ".NET ターゲット フレームワーク バージョン" は、プロジェクトの要件に応じて変更する必要があります。
  • このコードは、Visual Studio 2019 以降で使用できます。

以下のコードは、"DOTNET_TARGET_FRAMEWORK" プロパティを使用して、.NET Core 3.1 プロジェクトの .NET ターゲット フレームワークを指定する方法を示しています。

cmake_minimum_required(VERSION 3.29)

project(MyNetCoreProject)

set(SOURCE_FILES MyNetCoreProject.cpp)

add_executable(MyNetCoreTarget ${SOURCE_FILES})

target_link_libraries(MyNetCoreTarget MyLib)

set_property(TARGET MyNetCoreTarget PROPERTY DOTNET_TARGET_FRAMEWORK ".NETCoreApp,v3.1")

このコードは、"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティとほぼ同じように動作しますが、.NET Core または .NET Standard プロジェクトでのみ使用できます。



"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、CMake 3.29 以降では非推奨となっています。 代わりに、以下の 2 つの方法で .NET ターゲット フレームワーク バージョンを指定できます。

方法 1: "DOTNET_TARGET_FRAMEWORK" プロパティを使用する

"DOTNET_TARGET_FRAMEWORK" プロパティは、.NET Core および .NET Standard プロジェクトで使用されます。 このプロパティは、プロジェクトの .NET ターゲット フレームワークの種類とバージョンを指定するために使用されます。

使用方法

"DOTNET_TARGET_FRAMEWORK" プロパティは、以下の形式で設定できます。

set_property(TARGET <target> PROPERTY DOTNET_TARGET_FRAMEWORK "<framework_type>,<version>")
  • <version> は、.NET ターゲット フレームワーク バージョンを表す文字列です。 例えば、"v3.1" または "2.1" などを設定できます。
  • <framework_type> は、.NET ターゲット フレームワークの種類を表す文字列です。 例えば、".NETCoreApp" または ".NETStandard" などを設定できます。
  • <target> は、プロパティを設定するターゲットの名前です。

以下の例は、"MyNetCoreTarget" というターゲットの ".NET ターゲット フレームワーク" を ".NETCoreApp,v3.1" に設定します。

set_property(TARGET MyNetCoreTarget PROPERTY DOTNET_TARGET_FRAMEWORK ".NETCoreApp,v3.1")

方法 2: "DOTNET_TARGET_FRAMEWORK_VERSION" プロパティを使用する

"DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、C++/CLI プロジェクトで使用されます。 このプロパティは、プロジェクトの .NET ターゲット フレームワーク バージョンを表す文字列を指定するために使用されます。

使用方法

set_property(TARGET <target> PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "<version>")
  • <version> は、.NET ターゲット フレームワーク バージョンを表す文字列です。 例えば、"v4.5" または ".NETStandard2.0" などを設定できます。
  • <target> は、プロパティを設定するターゲットの名前です。

set_property(TARGET MyCLITarget PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "v4.5")

注意点

"DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは、CMake 3.29 以降では非推奨となっています。 新しいプロジェクトでは、"DOTNET_TARGET_FRAMEWORK" プロパティを使用することを推奨します。

"VS_DOTNET_TARGET_FRAMEWORK_VERSION" プロパティは非推奨となっているため、新しいプロジェクトでは "DOTNET_TARGET_FRAMEWORK" または "DOTNET_TARGET_FRAMEWORK_VERSION" プロパティを使用することを推奨します。

  • C++/CLI は、
  • ".NET Standard" は、.NET Core と互換性のある API の一連を提供する API 仕様です。
  • ".NET Core" は、クロスプラットフォーム .NET 開発のためのオープンソースで無料なフレームワークです。
  • ".NET ターゲット フレームワーク バージョン" は、プロジェクトがターゲットとする .NET ランタイム環境のバージョンを表します。
  • ".NET ターゲット フレームワーク" は、プロジェクトがターゲットとする .NET ランタイム環境を表します。