私は数年前からWinFormsプログラムを開発しています。現在、.NET Core(ASP.NET Core MVCを含む)を調査しています。新しいGUIデスクトップテクノロジーを探しています。Visual Studio 2015 update 3では、.NET CoreでGUIアプリを作成するオプションが表示されません。何が欠けていますか?
私は数年前からWinFormsプログラムを開発しています。現在、.NET Core(ASP.NET Core MVCを含む)を調査しています。新しいGUIデスクトップテクノロジーを探しています。Visual Studio 2015 update 3では、.NET CoreでGUIアプリを作成するオプションが表示されません。何が欠けていますか?
回答:
あなたは何も見逃していませんでした。MSは、.Net Core 3まで直接.Net Coreを使用してGUIアプリケーションを作成する合理的な方法を提供していませんでしたが、UWP(Universal Windows Platform)は部分的に.Net Coreの上に構築されています。
.Net Core 3.0はWindows専用ですが、WinformsとWPFのサポートを含みます。
.Net 6には、WindowsおよびmacOSデスクトップアプリケーションとモバイルアプリケーションをサポートする.Net MAUIが含まれ、Linuxデスクトップアプリケーションはコミュニティ(MSではない)によってサポートされます。.Net 5には、.Net MAUIのプレビューバージョンが含まれます。
過去2年間に登場したクロスプラットフォームオプションについては、他の回答を参照してください。
Electronを使用して、それをEdge.jsの resp で接続できます。電子エッジ。Edge.jsを使用すると、electron(node.js)は.net dllを呼び出すことができ、その逆も可能です。このようにして、HTML、CSS、JavaScriptでGUIを作成し、.netコアでバックエンドを作成できます。Electron自体もクロスプラットフォームであり、クロムブラウザーに基づいています。
AvaloniaUIは、Win / OSX / Linux上の.NET Core上での実行をサポートするようになりました。XAML、バインディング、およびコントロールテンプレートが含まれています。
たとえば、Riderを搭載したMacOで開発するには:
New Solution
- >(テンプレート一覧の上部付近) - > More Templates
- >ボタンInstall Template...
- >をブラウズディレクトリ手順1でテンプレートをクローン化しました。Reload
ボタンをNew Solution
テンプレートリストに表示されます!1つのオプションは、UIにJavaScript、HTML、CSSでElectronを使用し、バックエンドロジック用のWeb APIを自己ホストする.Net Coreコンソールアプリケーションを構築することです。Electronは、localhost:xxxxでサービスを公開するバックグラウンドでコンソールアプリケーションを起動します。
このように、.Netを使用してすべてのバックエンドロジックを実装し、JavaScriptからのHTTPリクエストを介してアクセスできます。
この投稿をご覧ください。Electron と.Net Coreを使用してクロスプラットフォームのデスクトップアプリケーションを構築し、githubでコードを確認する方法について説明しています
:私たちは、.NETコアと電子のためのオープンソースソリューションをコード化Electron.NET。 https://github.com/ElectronNET/Electron.NET
楽しい!
.NET Core 3は、Windowsデスクトップアプリケーションの作成をサポートします。昨日.NETカンファレンスでこのテクノロジーのデモを見ました。これは私が見つけた唯一のブログ投稿ですが、ポイントを示しています:https : //blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-デスクトップアプリケーション/
tl; dr-.NET Core開発者がクロスプラットフォームGUIフレームワークを提供できるかどうかはわかりません。
.NET Coreの初期バージョンでは、クロスプラットフォームGUIフレームワークが公式のツール(特に、古いバージョンのツール-VS 2015 update 3を実行しているとおっしゃっています)にバンドルされることを期待しているような気がします。
GUIフレームワークは非常に重く、ホストマシンにすでに存在するハードウェアの抽象化に依存しています。Windowsでは通常、ほとんどのユーザーが使用する単一のウィンドウマネージャー(WM)とデスクトップ環境(DE)がありますが、サポートされているLinuxのさまざまなディストリビューションでは、可能なWMとDEがいくつでもあります。 X-ServerまたはWaylandをKDE、Gnome、またはXFCEと組み合わせて使用している。しかし、これまでと同じLinuxインストールはありません。
オープンソースコミュニティがVMとDEの「標準」設定に本当に落ち着かないという事実は、.NET Core開発者がすべてのプラットフォームとその組み合わせで機能するGUIフレームワークを作成するのがかなり難しいことを意味しますDEおよびWM。
ここの多くの人々はいくつかの素晴らしい提案をしています(ASP.NET Coreを使用してWebアプリケーションを構築し、ブラウザーを使用して一連のクロスプラットフォームフレームワークを一覧表示することから)。上記のクロスプラットフォームGUIフレームワークのいくつかを見てみると、それらがどれほど重いかがわかります。
ただし、ミゲルデイカザが.NET ConfでLinuxとMacOSで素朴に動作しているXamarinを今年(2017年、これを将来読んでいる場合)披露したので、トンネルの終わりには光があるので、試してみる価値があるかもしれません準備ができたら
(ただし、.NET Core 2.0機能にアクセスするには、VS 2015からVS 2017にアップグレードする必要があります)
私は役立つかもしれないプロジェクトに取り組んでいます:https://github.com/gkmo/CarloSharp
次のアプリケーションは、HTML / JS / CSS(Angular)のUIで.netで記述されています
.NET CoreとMVCを使用してWebアプリケーションを開発し、それをWindowsユニバーサルJavaScriptアプリにカプセル化できます:https : //docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows
それはまだウェブアプリですが、新しいフレームワークを学んだり、UIを再開発したりせずにウェブアプリをデスクトップアプリに変換する非常に軽量な方法であり、優れた動作をします。
たとえば、electronやReactXPとは異なり、不便さはありません。その結果、クロスプラットフォームのデスクトップアプリではなく、ユニバーサルなWindowsアプリになります。
はい、可能です。
.NET Coreには、そのままではネイティブGUIアプリケーション用のコンポーネントがありません。ただし、Gregor Biswangerの回答によると、Electron.NETと呼ばれるNuGetパッケージがあります。
Electronは、Node.jsの上にネイティブGUIアプリケーションを構築できるようにするフレームワークです。Electron.NETは、.NET Coreコード内からElectronおよびNode.jsを利用できるようにするNuGetパッケージです。
良いニュースは、NuGetパッケージを使用するために、JavaScript、Electron、またはNode.jsを学ぶ必要がないことです。JSファイルはアプリケーション内で実行されますが、ビルドプロセスによって自動的に生成されます。
あなたがするすべてはかなり標準的なASP.NET Core MVCアプリを構築することです。唯一の違いは、ブラウザで実行するのではなく、ネイティブのウィンドウアプリとして実行することです。Electron.NETパッケージに固有の数行のコードに加えて、ASP.NET Core MVC以外のことを学ぶ必要はありません。
このページはそれを使用する方法についてのチュートリアルを提供します。また、サンプルコードリポジトリへのリンクも含まれています。
ネクロマンシング。既存のWinFormsアプリケーション
の特殊なケースの場合:
方法があります
-うまくいくかどうかはわかりません。
これは次のように
なります。monoからWinForms実装を取得します。
.NET CoreまたはNetStandardに移植します。
新しいSystem.Windows.Formsに対してWinFormsアプリケーションを再コンパイルします。
NetCoreによって破損する可能性のあるものを修正します。
monoが必要なパーツを完璧に実装できるように祈ってください。
(そうでない場合は、いつでも祈ることをやめ、修正/パッチ/機能を含むプルリクエストをモノプロジェクトに送信できます)
これが私のCoreFX WinFormsリポジトリです:https :
//github.com/ststeiger/System.CoreFX.Forms
.Net Core 3.0
以上を使用して次の手順を実行し、問題がない場合:(私は.NET Core CLIを使用しますが、Visual Studioも使用できます)
md MyWinFormsApp
オプションのステップcd MyWinFormsApp
オプションのステップdotnet new sln -n MyWinFormsApp
オプションのステップですが、それは良い考えですdotnet new winforms -n MyWinFormsApp
すみません、これはオプションではありませんdotnet sln add MyWinFormsApp
ステップ#3を実行した場合、これを行いますさて、あなたは私の答えを読むのをやめて、MyWinFormsApp
プロジェクトにコードを追加し始めることができます。ただし、フォームデザイナを使用する場合は、読み続けてください。
MyWinFormsApp.csproj
たファイルや変更を<TargetFramework>netcoreapp3.1<TargetFramework>
する<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
(あなたが使用している場合netcoreapp3.0
ではない心配を行い、それを変更<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
)ItemGroup
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
</ItemGroup>
これらの手順を実行した後、これはあなたが最終的に何をすべきかです:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
</ItemGroup>
</Project>
Program.cs
次のプリプロセッサを開いて追加します#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
これで、MyWinFormsApp
Visual Studio 2019を使用してプロジェクトを開くことができ(Visual Studio 2017も使用できると思いますが、よくForm1.cs
わかりません)、ダブルクリックすると、次のように表示されます。
さて、ツールボックス(Ctrl+W,X
)を開いて、アプリにコントロールを追加し、きれいにします。
Windows Forms .NET Core Designer @ Designerの詳細を読むことができます