.NET Core の Console アプリでダイアログ表示
◆ ItemGroup に Reference で System.Windows.Forms を追加しても見つからない
◆ Sdk と UseWindowsForms を変更する
◆ Microsoft.NET.Sdk → Microsoft.NET.Sdk.WindowsDesktop
◆ PropertyGroup に UseWindowsForms を追加して中身は true
◆ Sdk と UseWindowsForms を変更する
◆ Microsoft.NET.Sdk → Microsoft.NET.Sdk.WindowsDesktop
◆ PropertyGroup に UseWindowsForms を追加して中身は true
.NET Framework でコンソールアプリだけどダイアログを表示したい場合 普通にコンソールアプリとしてプロジェクトを作ってから 参照に System.Windows.Forms を追加して Forms の MessageBox.Show などを使います
.NET Core でも 3.0 から WinForms や WPF が使えるようになったので 同じようにコンソールアプリでダイアログを表示してみようとしました
まずは console 用にアプリを作ります
VSCode なので直接設定ファイルの csproj を編集して参照を追加します
ItemGroup で Reference を追加してこれで読み込めると思ったのですが……
using で System.Windows.Forms みつからないとエラーになります
winforms としてプロジェクトを作ってみたところ Project の Sdk プロパティが 「Microsoft.NET.Sdk.WindowsDesktop」 になっていて PropertyGroup の中に UseWindowsForms タグがあり中身が true でした
参照追加は .NET Framework のように Reference を追加するのじゃなくて Sdk の設定や UseWindowsForms のフラグが必要みたいです
なので コンソールプロジェクトの csproj を下のように修正しました
これで System.Windows.Forms が見つかるようになって MessageBox が使えるようになりました
変更量的に 最初から WinForms 用のプロジェクトを作って OutputType を Exe に変更するほうがいいかもしれません
.NET Core でも 3.0 から WinForms や WPF が使えるようになったので 同じようにコンソールアプリでダイアログを表示してみようとしました
まずは console 用にアプリを作ります
dotnet new console
VSCode なので直接設定ファイルの csproj を編集して参照を追加します
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
...
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Windows.Forms" />
</ItemGroup>
</Project>
ItemGroup で Reference を追加してこれで読み込めると思ったのですが……
using で System.Windows.Forms みつからないとエラーになります
winforms としてプロジェクトを作ってみたところ Project の Sdk プロパティが 「Microsoft.NET.Sdk.WindowsDesktop」 になっていて PropertyGroup の中に UseWindowsForms タグがあり中身が true でした
参照追加は .NET Framework のように Reference を追加するのじゃなくて Sdk の設定や UseWindowsForms のフラグが必要みたいです
なので コンソールプロジェクトの csproj を下のように修正しました
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>Exe</OutputType>
...
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
これで System.Windows.Forms が見つかるようになって MessageBox が使えるようになりました
変更量的に 最初から WinForms 用のプロジェクトを作って OutputType を Exe に変更するほうがいいかもしれません