プロジェクトを参照すると「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アプリケーションから参照するとエラーを再現できます。
MyWinClass.cs
using System.Windows.Forms;

namespace MyWinLibrary
{
  public class MyWinClass:Control
  {

  }
}

または、
MyWinClass.cs
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を愛用
掲載日: 2023-01-29
iPentec all rights reserverd.