NETコアでデスクトップGUIアプリケーションを作成することは可能ですか?


101

私は数年前からWinFormsプログラムを開発しています。現在、.NET Core(ASP.NET Core MVCを含む)を調査しています。新しいGUIデスクトップテクノロジーを探しています。Visual Studio 2015 update 3では、.NET CoreでGUIアプリを作成するオプションが表示されません。何が欠けていますか?


この新しいプラットフォームを見て、角度を変える必要があります。既存のすべてのフレームワーク、WPF / WinForms / UWP / GTK#/ Xamarin.Mac / iOS / Androidは、.NET Coreで記述したコードを使用できます。これにより、想像したとおりではなく、クロスプラットフォーム開発が可能になります。
Lex Li

あなたは私はGUIを構築することができると言っているので-for例-リサイズや.netのコア内のバックエンドコード
EKanadily

番号。.NET Coreで構築されたパッケージは、参照として直接追加できます。
レックスリー

1
電子は進むべき道です。APIの背後でasp.netを使用します。UIロジックライトを維持すると、アプリケーションの最も重要な部分を.netに維持できるはずです
user7558114

1
プロのヒントとして、VS 2015は.NET Core 2.0ツールにアクセスできないため、Visual Studio 2017(可能な場合)にアップグレードするか、利用可能な他のツール(CLIおよび/またはVS Code / Rider)を使用します。今後の開発を妨げます。あなたがしているすべてがそれを実験している場合でもです。
ジェイミーテイラー

回答:


64

あなたは何も見逃していませんでした。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年間に登場したクロスプラットフォームオプションについては、他の回答を参照してください。


41
ああ、それはショックだ!では、GUIを持たないクロスプラットフォームフレームワークのポイントは何ですか。
EKanadily 2016

19
@EssamGndelee主要なポイントはASP.NET Coreアプリケーションです。2番目のポイントは、コンソールアプリケーションです。
2016

3
@ChristopherPainterクラウドコンピューティングのサポートが向上し、Node.jsなどのプラットフォームから開発者を引き付けることが、.Net Coreが存在する理由の一部です(そうです)。しかし、だからといって、Microsoftが今それらにのみ関心があるというわけではない。
スビック2017

1
@CYoungマイクロソフトでは、そのためにUWPを使用するべきだと考えています。
2017年

1
@svick、それはクロスプラットフォームのプログラミングを完全に排除します。これは.NET Coreが解決するはずでした。UWPはMSファミリにのみ十分です:/
ワルサー

41

Electronを使用して、それをEdge.jsの resp で接続できます。電子エッジ。Edge.jsを使用すると、electron(node.js)は.net dllを呼び出すことができ、その逆も可能です。このようにして、HTML、CSS、JavaScriptでGUIを作成し、.netコアでバックエンドを作成できます。Electron自体もクロスプラットフォームであり、クロムブラウザーに基づいています。


5
しかし、なぜ電子なのか?また、ポートXでWebアプリケーションを開き、ブラウザーをそこに移動することもできます。Electronとは異なり、常に最新バージョンのブラウザであるため、Electronで可能なすべての機能が含まれています。特定のブラウザバージョンが必要な場合は、ディストリビューションにGoogle-Chromeを含めてください。
Stefan Steiger 2017年

1
@StefanSteiger electronを使用し、アセンブリを介してAPIを直接呼び出すと、ユーザーがアプリをWebアプリとして表示しないギャップが埋められると思います。また、一部の開発者は、HTTPを使用して通信層を追加したくありません。
Brian Ng 2017

このようなElectron.Netルックスは今非常に簡単ですcross-platform-b​​log.com/electron.net/...
J.アレン

Electron.NETは有望に見えますが、プロダクションマシンで安全でないWebサーバーを開かざるを得ないため、プロダクションでの使用にうんざりしています。次に、アプリのASP.NET Core側がIISやnginx(または同様のもの)などの適切に構成されたリバースプロキシサーバーの背後にある限り、安全です。
ジェイミーテイラー

hellは、アプリをmvc / webapiとして、ランダムポートでローカルにホストし、ローカルapiを呼び出すelectronインターフェイスを使用できます。
Wjdavis5 2018年

40

AvaloniaUIは、Win / OSX / Linux上の.NET Core上での実行をサポートするようになりました。XAML、バインディング、およびコントロールテンプレートが含まれています。

たとえば、Riderを搭載したMacOで開発するには:

  1. 手順に従ってAvalonia dotnet新しいテンプレートインストールします
  2. JetBrains Riderを開き、ようこそ画面から
  3. 選択してくださいNew Solution- >(テンプレート一覧の上部付近) - > More Templates- >ボタンInstall Template...- >をブラウズディレクトリ手順1でテンプレートをクローン化しました。
  4. クリックReloadボタンを
  5. 見よ!AvaloniaテンプレートがNew Solutionテンプレートリストに表示されます!
  6. Avaloniaテンプレートを選択
  7. ビルドして実行します。目の前で開いているGUIを確認してください。

JetBrains Riderにdotnet新しいテンプレートをインストールするためのGUI手順


30

Qml.Netを使用して、.NET CoreでQt / QtQuick / QMLを使用できるようになりました

高いパフォーマンスを発揮し(「ピンボークチャット」ではありません)、完全に機能し、Linux / OSX / Windowsで動作します。

私のブログ投稿をチェックして現在他のオプションと比較してみてください。

PS:私は著者です。


それは非常に有望に見えます、私はそれを調べます
ダニエル・

22

1つのオプションは、UIにJavaScript、HTML、CSSでElectronを使用し、バックエンドロジック用のWeb APIを自己ホストする.Net Coreコンソールアプリケーションを構築することです。Electronは、localhost:xxxxでサービスを公開するバックグラウンドでコンソールアプリケーションを起動します。

このように、.Netを使用してすべてのバックエンドロジックを実装し、JavaScriptからのHTTPリクエストを介してアクセスできます。

この投稿をご覧ください。Electron と.Net Core使用してクロスプラットフォームのデスクトップアプリケーションを構築し、githubでコードを確認する方法について説明しています


17

コンソールベースのUIを作成するには、gui.csを使用できます。(Xamarinの作成者であるMiguelからの)オープンソースであり、Windows、Linux、MacOの.Netコアで実行されます。

次のコンポーネントがあります。

  • ボタン
  • ラベル
  • テキスト入力
  • テキストビュー
  • 時間編集フィールド
  • ラジオボタン
  • チェックボックス
  • ダイアログボックス
    • メッセージボックス
  • ウィンドウズ
  • メニュー
  • ListViews
  • フレーム
  • ProgressBars
  • スクロールビューとスクロールバー
  • 16進数のビューア/エディタ(HexView)

スクリーンショットの例

gui.csサンプル出力のスクリーンショット




4

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にアップグレードする必要があります)


Linuxの多様性に理由はありません。1. Javaはスムーズに動作します。2. MonoはWinFormsを正常に実行します(醜いです)。Linuxでは、QTベースのディストリビューションでGTKを使用できます。逆も同様です。.netコア用のQTバインディングがあると便利です。
ボグダンマート

私はあなたが言うすべてに同意します。しかし、Microsoftのアプローチは、現時点でAzureプラットフォームを介してIaaS(サービスとしてのインフラストラクチャー)、SaaS(サービスとしてのソフトウェア)、およびPaaS(サービスとしてのプラットフォーム)を提供することだと思います。彼らのファーストパーティ、オープンソース、クロスプラットフォームフレームワークが開発者をその方向に向けることを優先事項とすることは理にかなっています。Azureや、RHELやGoogleなどの他の企業がASP NET Coreと.NET Coreの両方をサポートするために行っている作業は、実際には伝説的なものであり、.NET Coreの優先順位がそれを反映しているように見えるのは当然です。
ジェイミーテイラー


3

.NET CoreとMVCを使用してWebアプリケーションを開発し、それをWindowsユニバーサルJavaScriptアプリにカプセル化できます:https : //docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

それはまだウェブアプリですが、新しいフレームワークを学んだり、UIを再開発したりせずにウェブアプリをデスクトップアプリに変換する非常に軽量な方法であり、優れた動作をします。

たとえば、electronReactXPとは異なり、不便さはありません。その結果、クロスプラットフォームのデスクトップアプリではなく、ユニバーサルなWindowsアプリになります。


2

はい、可能です。

.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以外のことを学ぶ必要はありません。

このページはそれを使用する方法についてのチュートリアルを提供します。また、サンプルコードリポジトリへのリンクも含まれています。


2

ネクロマンシング。既存のWinFormsアプリケーション
の特殊なケースの場合: 方法があります

-うまくいくかどうかはわかりません。
これは次のように
なります。monoからWinForms実装を取得します。
.NET CoreまたはNetStandardに移植します。

新しいSystem.Windows.Formsに対してWinFormsアプリケーションを再コンパイルします。
NetCoreによって破損する可能性のあるものを修正します。
monoが必要なパーツを完璧に実装できるように祈ってください。
(そうでない場合は、いつでも祈ることをやめ、修正/パッチ/機能を含むプルリクエストをモノプロジェクトに送信できます)

これが私のCoreFX WinFormsリポジトリです:https :
//github.com/ststeiger/System.CoreFX.Forms


2

これは古い質問ですが、はい、VSCode、.Net Core、C#、gtk3、gtksharp、GladeをGUIデザイナーとして使用して、Windows、Linux、macOS向けのクロスプラットフォームデスクトップ(GUI)アプリケーションを開発できます。

こちらがその方法です。


0

.Net Core 3.0以上を使用して次の手順を実行し、問題がない場合:(私は.NET Core CLIを使用しますが、Visual Studioも使用できます)

  1. md MyWinFormsApp オプションのステップ
  2. cd MyWinFormsApp オプションのステップ
  3. dotnet new sln -n MyWinFormsApp オプションのステップですが、それは良い考えです
  4. dotnet new winforms -n MyWinFormsApp すみません、これはオプションではありません
  5. dotnet sln add MyWinFormsApp ステップ#3を実行した場合、これを行います

さて、あなたは私の答えを読むのをやめて、MyWinFormsAppプロジェクトにコードを追加し始めることができます。ただし、フォームデザイナを使用する場合は、読み続けてください。

  1. 開いMyWinFormsApp.csprojたファイルや変更を<TargetFramework>netcoreapp3.1<TargetFramework>する<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(あなたが使用している場合netcoreapp3.0ではない心配を行い、それを変更<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
  2. 次に、以下を追加します 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>
  1. Program.cs次のプリプロセッサを開いて追加します
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

これで、MyWinFormsAppVisual Studio 2019を使用してプロジェクトを開くことができ(Visual Studio 2017も使用できると思いますが、よくForm1.csわかりません)、ダブルクリックすると、次のように表示されます。

ここに画像の説明を入力してください

さて、ツールボックス(Ctrl+W,X)を開いて、アプリにコントロールを追加し、きれいにします。

Windows Forms .NET Core Designer @ Designerの詳細を読むことができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.