Visual StudioとCMakeの連携:"DOTNET_TARGET_FRAMEWORK"プロパティで.NET Frameworkターゲティングを極める
CMake の "DOTNET_TARGET_FRAMEWORK" プロパティは、Visual Studio 2010以降のジェネレータを使用する場合に、C++/CLI および C# プロジェクトのターゲット .NET フレームワークを指定するために使用されます。このプロパティは、ターゲット レベルで設定するか、CMAKE_DOTNET_TARGET_FRAMEWORK
変数を使用してすべてのターゲットにグローバルに設定することができます。
構文
target_property(TARGET target_name DOTNET_TARGET_FRAMEWORK framework)
framework
:ターゲットが使用する .NET フレームワークのバージョンを指定します。例:netcoreapp3.1
TARGET
:プロパティを設定するターゲットの名前を指定します。
グローバル設定
CMAKE_DOTNET_TARGET_FRAMEWORK
変数を使用して、すべてのターゲットに .NET フレームワークをグローバルに設定することができます。
set(CMAKE_DOTNET_TARGET_FRAMEWORK framework)
例
以下の例では、mytarget
という名前のターゲットの .NET フレームワークを netcoreapp2.1
に設定します。
target_property(TARGET mytarget DOTNET_TARGET_FRAMEWORK netcoreapp2.1)
以下の例では、すべてのターゲットの .NET フレームワークを netcoreapp3.1
にグローバルに設定します。
set(CMAKE_DOTNET_TARGET_FRAMEWORK netcoreapp3.1)
CMAKE_DOTNET_TARGET_FRAMEWORK
変数とDOTNET_TARGET_FRAMEWORK
プロパティの両方を設定した場合、後者の設定が優先されます。DOTNET_TARGET_FRAMEWORK
プロパティは、Visual Studio 2010以降のジェネレータのみでサポートされています。
netcoreapp3.1 をターゲットとするプロジェクト
cmake_minimum_required(VERSION 3.17)
project(myproject1)
set(CMAKE_DOTNET_TARGET_FRAMEWORK netcoreapp3.1)
add_executable(mytarget1 mytarget1.cpp)
net6.0 をターゲットとするプロジェクト
cmake_minimum_required(VERSION 3.17)
project(myproject2)
target_property(TARGET mytarget2 DOTNET_TARGET_FRAMEWORK net6.0)
add_executable(mytarget2 mytarget2.cpp)
- 上記のコードは、CMake の
cmake_minimum_required
コマンドを使用して、CMake バージョン 3.17 以降が必要であることを指定します。 - 次に、
project
コマンドを使用して、各プロジェクトの名前 (myproject1
およびmyproject2
) を定義します。 set
コマンドを使用して、CMAKE_DOTNET_TARGET_FRAMEWORK
変数をnetcoreapp3.1
に設定します。これにより、myproject1
プロジェクト内のすべてのターゲットは、.NET Framework 3.1 をターゲットとするようになります。add_executable
コマンドを使用して、mytarget1
およびmytarget2
という名前の実行可能ファイルをそれぞれ作成します。myproject2
プロジェクトの場合、target_property
コマンドを使用して、mytarget2
ターゲットのDOTNET_TARGET_FRAMEWORK
プロパティをnet6.0
に設定します。これにより、mytarget2
ターゲットは .NET Framework 6.0 をターゲットとするようになります。
- この例は、Visual Studio 2010以降のジェネレータを使用していることを前提としています。
代替方法
"DOTNET_TARGET_FRAMEWORK" プロパティの代替方法として、以下の方法が考えられます。
プロジェクトファイルを手動で編集する
Visual Studio でプロジェクトを開き、.csproj
または .vcxproj
ファイルを手動で編集して、ターゲット .NET フレームワークを設定することができます。
例:.csproj
ファイル
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
例:.vcxproj
ファイル
<Project Default="MyTarget" xmlns="http://schemas.microsoft.com/visualstudio/2008/IntegrationProjects">
<PropertyGroup>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
</PropertyGroup>
<ItemGroup>
<ClCompile Include="mytarget.cpp" />
</ItemGroup>
<Import Project="$(MSBuildDefaultTargets)"></Import>
</Project>
dotnet コマンドライン ツールを使用する
dotnet
コマンドライン ツールを使用して、プロジェクトのターゲット .NET フレームワークを設定することができます。
dotnet restore
dotnet publish -c Release -f netcoreapp3.1
msbuild コマンドライン ツールを使用する
msbuild
コマンドライン ツールを使用して、プロジェクトのターゲット .NET フレームワークを設定することができます。
msbuild myproject.csproj /p:TargetFramework=netcoreapp3.1
注意事項
dotnet
およびmsbuild
コマンドライン ツールを使用するには、それらのツールがインストールされている必要があります。- プロジェクトファイルを手動で編集する場合、誤った変更を行うとプロジェクトが破損する可能性があるため、注意が必要です。
- 上記の代替方法は、CMake を使用しない場合にのみ有効です。
"DOTNET_TARGET_FRAMEWORK" プロパティは、CMake で .NET フレームワークを設定する最も簡単な方法ですが、上記の代替方法も状況に応じて使用することができます。