プロジェクトを参照すると「Windows フォームまたは WPF を使用しているとき、またはそのようなプロジェクトまたはパッケージを参照しているときには、 ターゲット プラットフォームを Windows に設定する必要があります」エラーが発生する - C#
プロジェクトを参照すると「Windows フォームまたは WPF を使用しているとき、またはそのようなプロジェクトまたはパッケージを参照しているときには、
ターゲット プラットフォームを Windows に設定する必要があります」エラーが発生する現象と対処法を紹介します。
現象
System.Windows.Forms 名前空間のクラスを参照、System.Windows.Controls名前空間のクラスを参照した
ライブラリのプロジェクトを参照してビルドすると、以下のエラーが発生します。
エラーメッセージ
NETSDK1136:Windows フォームまたは WPF を使用しているとき、またはそのようなプロジェクトまたはパッケージを参照しているときには、
ターゲット プラットフォームを Windows に設定する必要があります (通常は TargetFramework プロパティに '-windows' を含めることによる)。
英語版では以下のエラーメッセージになります。
エラーメッセージ
NETSDK1136:The target platform must be set to Windows (usually by including '-windows' in the TargetFramework property)
when using Windows Forms or WPF, or referencing projects or packages that do so.
再現コード
以下のコードのライブラリを作成し、Windows Formアプリケーションから参照するとエラーを再現できます。
using System.Windows.Forms;
namespace MyWinLibrary
{
public class MyWinClass:Control
{
}
}
または、
using System.Windows.Controls;
namespace MyWinLibrary
{
public class MyWinClass:Control
{
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
原因
System.Windows.Forms 名前空間を参照したライブラリの場合は、[ターゲットOS]をWindowsに設定する必要があります。
対処法:プロジェクトファイルを編集する
プロジェクトファイルを編集します。
ソリューションエクスプローラーでクラスライブラリのプロジェクトのノードをクリックして選択します。
右クリックします。下図のポップアップメニューが表示されます。メニューの[プロジェクト ファイルの編集]の項目をクリックします。
プロジェクトファイルのXMLがテキストエディタに表示されます。
プロジェクトファイルのコードを変更します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
TargetFramework
タグの値を変更し、
<UseWindowsForms>true</UseWindowsForms>
を追加します。
Windows Formアプリケーションの名前空間(System.Windows.Formsなど)のクラスを参照している場合は以下のコードに修正します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
WPFアプリケーションの名前空間(System.Windows.Controlsなど)のクラスを参照している場合は以下のコードに修正します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
.NETのバージョンに対応するTargetFrameworkの値は以下になります。
.NETのバージョン | TargetFrameworkの値 |
.NET 7 | net7.0-windows |
.NET 6 | net6.0-windows |
.NET 5 | net5.0-windows |
.NET Core 3.1 | netcoreapp3.1 |
動作確認
プロジェクトファイル後、ビルドしエラーが解消されることを確認します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用