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")
このコードでは、以下の処理が行われています。
- CMake の最小バージョンを 3.29 に設定します。
- "MyProject" という名前のプロジェクトを作成します。
- ソースファイル "MyProject.cpp" を指定します。
- "MyTarget" という名前の実行可能ファイルを作成します。
- "MyTarget" に "MyLib" ライブラリをリンクします。
- "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 ランタイム環境を表します。