プロジェクトを参照すると「Windows フォームまたは WPF を使用しているとき、またはそのようなプロジェクトまたはパッケージを参照しているときには、
ターゲット プラットフォームを Windows に設定する必要があります」エラーが発生する現象と対処法を紹介します。
System.Windows.Forms 名前空間のクラスを参照、System.Windows.Controls名前空間のクラスを参照した
ライブラリのプロジェクトを参照してビルドすると、以下のエラーが発生します。
英語版では以下のエラーメッセージになります。
以下のコードのライブラリを作成し、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 |
プロジェクトファイル後、ビルドしエラーが解消されることを確認します。