【NETSDK1137】Microsoft.NET.Sdk.WindowsDesktop SDKを使用する必要はなくなりました。

対象のフレームワークを .NET Core から .NET 5.0 を指定すると、以下のような警告が表示されます。

コード 説明
NETSDK1137 Microsoft.NET.Sdk.WindowsDesktop SDKを使用する必要は無くなりました。
ルートプロジェクト要素のSDK属性を’Microsoft.NET.SDK’に変更することをご検討ください。

 

そこで、プロジェクトファイル(*.csproj)をテキストエディタで開くか、Visual Studioで表示されているプロジェクト名をダブルクリックでプロジェクトファイル(*.csproj)を開き、 Project Sdk を

Microsoft.NET.Sdk.WindowsDesktop から Microsoft.NET.Sdk へ変更します。

 

具体的には

【修正前】

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 <PropertyGroup>
 <OutputType>WinExe</OutputType>
 <TargetFramework>net5.0-windows</TargetFramework>
 <UseWindowsForms>true</UseWindowsForms>
 </PropertyGroup>
</Project>

【修正後】

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
 <OutputType>WinExe</OutputType>
 <TargetFramework>net5.0-windows</TargetFramework>
 <UseWindowsForms>true</UseWindowsForms>
 </PropertyGroup>
</Project>

のように修正します。

 

← .NET 5 C# Windows Forms プログラム へ戻る

.NET 5 正式版が公開されました

2020年11月11日(日本時間)、.NET5の正式版が公開されました!!

 

.NET5は以下のページよりダウンロードできます。

https://dotnet.microsoft.com/download/dotnet/5.0

 

対応のVisual Studio は Visual Studio 2019 Ver.16.8以降でこちらから入手できます。

すでにVisual Studio2019をインストール済みの場合、メニューの ヘルプ→更新プログラムの確認 よりアップデートしてください。

https://visualstudio.microsoft.com/ja/

 

(参考情報)

Announcing .NET 5.0

 

← .NET 5 C# Windows Forms プログラム へ戻る

.NET Frameworkから.NET5への移植作業(Windows Formsの場合)

.NET Frameworkで作成していたプログラムを.NET5への移植作業方法を手探りしながら調べているのですが、そのメモ状態の情報です。(随時、修正中です。)

そもそも、.NET5は従来の.NET Coreの流れを組んでいるため、.NET Frameworkで作成したプロジェクトのプロパティで、対象のフレームワーク.NET5 を選ぶ事ができません。

 

.NET Frameworkから.NET5に移行するにあたって、プロジェクトファイル(*.csproj)が大きく変更されています。このプロジェクトファイルを何とかすれば、移植が可能なようです。

 

そこで、移植評価のサンプルとして、私がよく使う構成の.NET Frameworkのプロジェクトを用意しました。

フォームには

  • ToolStripMenuItem
  • StatusStrip
  • SplitContainer
  • PictureBox
  • Label
  • TextBox
  • Button

を配置し、TextBoxのTextプロパティは前回の状態を保持できるように、PropertyBindingを設定しました。

 

移植作業は

  1. .NET 5.0 との互換性を調べる
  2. プロジェクトファイルの差し替え
  3. アプリケーションの設定
  4. 参照の追加
  5. App.configファイルの修正

の手順で行います。

.NET Frameworkから .NET 5.0 へ変換するための互換性を調べる

.NET Frameworkから .NET 5.0 への互換性を調べるには、 .NET Portability Analyzer というツールを使います。

このツールを使うには、Visual Studio のメニューの 拡張機能 → 拡張機能の管理 をクリックします。

表示されたウィンドウの オンライン を選択し、右上の検索ボックスに .NET Portability と入力すると
.NET Portability Analyzer がみつかるので、これをダウンロードしインストール(Modifyボタンをクリック)します。

インストールが完了すると、Visual Studioのメニューの 分析 に追加されますが、まずは、ツールの設定を行うため、 Portability Analyzer Setting をクリックします。

今回は、 .NET 5.0への互換性を調べるため、 .NET の 5.0 にチェックを入れます。
また、Output formatsは、好みもあると思いますが、 HTML が見やすいので、これにチェックを入れます。

上図のようにチェックを入れたら、OKボタンをクリックし、メニューの Analyze Assembly Portability をクリックします。

すると、プロジェクトが出力する実行ファイル(*.exe)〔ライブラリの時はdllファイル〕を聞かれるので、exeファイル もしくは dllファイルを選択し、開く をクリックします。

すると、作成された互換性解析結果のファイルが表示されるので、 Open Report をクリックします。

解析結果は以下のように表示されます。

これを見ると、 .NET 5.0 への互換性は100%
100%でない場合は、まだ見た事がないのですが、互換性が無いと、 Recommend changes に何か表示されるのかな??

これで、 .NET 5.0 への互換性は100%あると確認できたので、移植作業を行います。

※移植作業のため、.NET Frameworkのプロジェクト一式すべて、.NET 5.0用にファイルをコピーします。
(旧.NET Frameworkのプロジェクトも構成を調べるのに使うので、とっておいてください)

プロジェクトファイル(*.csproj)の差し替え

コピーしたプロジェクトを Visual Studio で開き、プロジェクトファイル(*.csproj)を編集するのですが、そのままでは編集できないので、ソリューションエクスプローラのプロジェクト名を右クリックし、プロジェクトのアンロードを行います。

プロジェクトのアンロードを行うと、プロジェクトファイルの中身が表示されます。

.NET Frameworkのプロジェクトファイルの中身は、上図のように、いろいろと記載されているのですが、.NET 5.0 では、とりあえず以下の内容に差し替えます。

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net5.0-windows</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
</Project>

ただし、プロジェクトの出力ファイルが実行ファイル(*.exe)ではなく、ライブラリ(*.dll)の場合は

<OutputType>WinExe</OutputType>

の行は削除します。

差し替え後のプロジェクトファイルは下図のように、不安になるぐらいスッキリとしていますが、不足している物もあるので、次項で修正していきます。

プロジェクトファイルの中身を差し替えたら、アンロードしたプロジェクト名を右クリックし、プロジェクトの再読み込みを行います。

アプリケーションの設定

プロジェクト名を右クリックし、プロパティで表示されるアプリケーションの設定は、プロジェクトファイルを差し替えた事で、.NET Frameworkで行っていた設定が消えている可能性があるため、必要に応じて設定してください。

出力されたファイル(*.exe、*.dll)のプロパティで表示される会社名やバージョンなどは、.NET Frameworkの時は、アプリケーションの設定のページに アセンブリ情報 というボタンがありましたが、 .NET 5.0 では、パッケージという項目へ移動したので、この内容も間違いないか?確認してください。

 

参照の追加

.NET Frameworkのプロジェクトの 参照 に追加していたプロジェクトやライブライへの参照を追加します。

.NET 5.0 でのプロジェクトでは、 参照 から 依存関係 に表示が変更されていますが、この 依存関係 を右クリックし、プロジェクト参照の追加 をクリックします。

ここで、従来の参照と同じ様に、プロジェクトやライブラリの参照を追加します。

依存関係の参照にライブラリやプロジェクトを追加すると以下のように、.NET Frameworkの時の参照からは少し変更された表示になっています。

 

App.configファイルの修正

プロジェクトに App.config ファイルがある場合は、このファイルを修正します。

ソリューションエクスプローラの App.config ファイルを選択し、<supportedRuntime>の部分(下図の青く選択された部分)を削除します。

 

動作確認

ここまで修正を行い、ソリューションのビルドを行うと、フォームのアイコンが変更され、.NET 5.0 に移植出来た事が確認できます。

 

その他

.NET Frameworkから.NET5へ移植すると、SplitContainerの表示が少し崩れていました。
また、.NET Frameworkでは、SplitContainerのSplitterの位置は、フォームエディタの表示で、マウスのドラッグで移動する事ができましたが、.NET5では、それが出来なくなっていたので、SplitterDistanceプロパティで調整してみたりと、他にも少しずつ、.NET Frameworkとは異なる点があるとは思います。

他にも、.NET Frameworkのソリューションで、

・Windows Formsのプロジェクト
・クラスライブラリのプロジェクト
・ユーザーコントロールのプロジェクト

を作り、Windows Formsのプロジェクトから、クラスライブラリ、ユーザーコントロールのプロジェクトを参照し、Windows Formsのプロジェクトだけを.NET 5.0に変更し、他は.NET Frameworkのままにしてみたのですが、動作はするようでした。
つまりは、.NET 5.0 のプロジェクトから、.NET Frameworkのライブラリを使う事が出来たのですが、.NET と .NET Framework が混在出来るのは、今だけ?かもしれないので、どうせ.NET へ移植するのなら、すべてを移植するようにした方が良いでしょうね?

参考ページ

https://docs.microsoft.com/ja-jp/dotnet/core/porting/winforms

 

 .NET 5 C# Windows Forms プログラミング へ戻る

【.NET 5 C# WinForms】バージョン情報の設定

プログラムのバージョン情報を指定するのには、.NET Frameworkの時は、プロジェクトのプロパティをクリックし、

表示された画面の アプリケーションアセンブリ情報 をクリックすると

 

アセンブリ情報のウィンドウが表示され、バージョンを設定することができました。

 

しかしながら、.NET 5 で作成したプロジェクト(Windows Forms(.NET Core))ではプロジェクトのプロパティのアプリケーションの画面にアセンブリ情報のボタンがありません。

 

.NET 5 で作成したプロジェクト(Windows Forms(.NET Core))では、プロジェクトのプロパティで表示された画面に パッケージ が追加されているので、このパッケージを選択し、画面の下の方にアセンブリバージョンアセンブリファイルのバージョンがあるので、この値を編集します。

 

 .NET 5 C# Windows Forms プログラミング へ戻る

【.NET 5 C# WinForms】メニューとメニューイベントの追加

(2021.8.3追記)Visual Studio 2019を更新することにより下図のように従来の.NET Frameworkと同等にメニューを追加できるようになりました。本記事は旧バージョン操作方法となります。
下図は Visual Studio Community 2019 バージョン 16.10.4 の画面です。

 


 

.NET5のメニューは、.NET Frameworkのメニューと比べ、メニューの追加方法とイベントの追加方法が変更されています。

今回は、このよう↓にメニューを追加します。

 

メニューの追加

ツールボックスの MenuStrip をフォームへドラッグ&ドロップします。

 

すると、フォームに MenuStrip が追加されますが、.NET Framework のときのように、 ここへ入力 の文字が表示されていません。

(参考).NET FrameworkのMenuStrip

 

.NET 5において、メニューを追加するには、MenuStripプロパティ画面の ItemsCollection を追加するため、右側にある ボタンをクリックします。

 

すると、このようなエディタが表示されます。

 

次に、Addボタンをクリックし、MenuItemを追加します。

.NET5でも、.NET Frameworkと同じように MenuStrip にMenuItem,ComboBox,TextBoxが追加可能です。

 

MenuItemを追加すると、このようになります。

 

さらに後から分かりやすいように、 (Name)の名前を変更し、メニューの表示名(今回は ファイル(&F))を変更しておきます。

 

同様にして ヘルプ 用のメニューも追加した状態がこちら↓

 

さらにメニューの ファイルの下に 開く終了 を追加したいので、今度は DropDownItems の(Collection) の右側にある ボタンをクリックし、 開く終了 を、ファイルの時と同様に追加します。

 

メニューイベントの追加

次に、メニューのクリックイベントを追加したいのですが、.NET Frameworkの時にあった⚡マークがありません。

そこで、プロパティウィンドウの上部にある ▼マーク をクリックしすると、フォームに追加されているコントロール一覧が表示されるので、この中からメニューのイベントを追加したい項目(ここでは menuFileExit)を選択します。

 

すると、 menuFileExitのプロパティが表示され、⚡マークも表示されるので、⚡をクリックし、さらにメニューのクリックイベント(Click)をダブルクリックします。

 

すると、.NET Frameworkと同様に、Clickイベントのコードが生成されるので、イベント内の処理を追記していきます。

 

今回は 終了 のメニューイベントだったので、 this.Close() を追記しました。

 

このようにして、最初に示したようなメニューが追加できます。

 

 .NET 5 C# Windows Forms プログラミング へ戻る

【.NET 5 C# WinForms】新規プロジェクトの作成

.NET5 の Windows Forms のプロジェクトの作成はVisual Studio を起動し、新しいプロジェクトの作成をクリックします。
※.NET 5.0を使用するには Visual Studio 2019 Ver.16.8以降が必要になります。

 

表示されたプロジェクトの種類の中から、 Windows Forms App(.NET) を選択し、次へをクリックします。

 

Windows Forms App(.NET)とは別に Windows フォームアプリケーション(.NET Framework)もあるので、ご注意下さい。(こちらのプロジェクトでは.NET 5 は指定できません。)

また、プロジェクトの種類が多いので、探すのが大変な場合は、上の方にあるプルダウンから C#,Windows ,デスクトップ を選択すると、少し見つけやすくなります。

 

これで、最小限のプロジェクトが作成されますが、C#のソースコードを見ると、従来の.NET Frameworkのソースコードと違いはありません。

ちょっと違うのが、フォームのアイコンぐらいでしょうか??

 

プロジェクトのプロパティで、対象のフレームワーク を確認し、.NET 5.0 を使用する場合は、対象のフレームワークを .NET 5.0 へ変更してください。

 

また、対象のフレームワークを .NET Core から .NET へ変更すると、以下のような警告が表示されます。

この場合、プロジェクトの設定を変更するのですが、変更方法については、下記ページを参照下さい。

【NETSDK1137】Microsoft.NET.Sdk.WindowsDesktop SDKを使用する必要はなくなりました。

 

.NET 5 C# Windows Forms プログラミング へ戻る