.NET 8 と Blazor、ASP.NET Core (Razor Pages、MVC) を使用してクロスプラットフォーム デスクトップ アプリを構築します。
Electron.NET は、ASP.NET Core アプリケーションが組み込まれたネイティブ Electron アプリケーションのラッパーです。 Electron.NET IPC ブリッジを介して、.NET から Electron API を呼び出すことができます。
CLI 拡張機能は、Electron.NET アプリケーションを構築および起動するためのツールセットをホストします。
そうです...X-plat デスクトップ アプリを実行するには、さまざまなアプローチがたくさんあります。私たちは、.NET 開発者が ASP.NET Core 環境を使用し、それを Electron と呼ばれる非常に堅牢な X-plat 環境内に組み込むことができれば便利だと考えました。 Electron を .NET に移植することはこのプロジェクトの目標ではありません。少なくとも、それを行う方法についてはまったくわかりません。 ASP.NET Core と Electron を組み合わせただけです。
電子NET.API | ElectronNET.CLI
現在の Electron.NET CLI は、Windows/macOS/Linux バイナリをビルドします。 API は .NET 8 を使用するため、最小ベース OS は .NET 8 と同じになります。
また、次のものをインストールしておく必要があります。
Gitter でのチャットやここで議論されている問題のほかに、タグelectron.net
を付けて StackOverflow を使用することもできます。
このプロジェクトのさらなるメンテナンスと開発のスポンサーになりたい場合は、寄付セクションをご覧ください。
"ネイティブ" (ネイティブのようなもの) Electron API をアクティブにして通信するには、ASP.NET Core アプリに ElectronNET.API NuGet パッケージを含めます。
PM > Install-Package ElectronNET.API
UseElectron
WebHostBuilder-Extension を使用して Electron.NET を起動し、Electron ウィンドウを開きます。
using ElectronNET . API ;
using ElectronNET . API . Entities ;
var builder = WebApplication . CreateBuilder ( args ) ;
builder . WebHost . UseElectron ( args ) ;
// Is optional, but you can use the Electron.NET API-Classes directly with DI (relevant if you want more encoupled code)
builder . Services . AddElectron ( ) ;
var app = builder . Build ( ) ;
.. .
await app . StartAsync ( ) ;
// Open the Electron-Window here
await Electron . WindowManager . CreateWindowAsync ( ) ;
app . WaitForShutdown ( ) ;
UseElectron
WebHostBuilder-Extension を使用して Electron.NET を起動します。
public static IHostBuilder CreateHostBuilder ( string [ ] args ) =>
Host . CreateDefaultBuilder ( args )
. ConfigureWebHostDefaults ( webBuilder =>
{
webBuilder . UseElectron ( args ) ;
webBuilder . UseStartup < Startup > ( ) ;
} ) ;
Startup.csファイルの Electron ウィンドウを開きます。
public void Configure ( IApplicationBuilder app , IWebHostEnvironment env )
{
//...
Electron . WindowManager . CreateWindowAsync ( ) ;
}
アプリケーションを起動するには、「ElectronNET.CLI」パッケージがグローバル ツールとしてインストールされていることを確認してください。
dotnet tool install ElectronNET.CLI -g
初めて、Electron.NET プロジェクトを初期化する必要があります。 ASP.NET Core フォルダーに次のコマンドを入力します。
electronize init
electronize start
最初の
electronize start
だけ遅いです。次はもっと早く進みます。
ファイル ウォッチャーは、Electron.NET バージョン 8.31.1 に含まれています。たとえば、ファイルの変更により、コンパイル、テストの実行、またはデプロイメントがトリガーされることがあります。 Electron.NET ウィンドウが自動的に更新され、新しいコードの変更がより早く表示されるようになります。次の Electron.NET CLI コマンドが必要です。
electronize start /watch
最初の
electronize start
だけ遅いです。次はもっと早く進みます。
Electron.NET CLI コマンドを使用して Electron.NET アプリケーションを起動します。 Visual Studio で、実行中のアプリケーション インスタンスにアタッチします。 「デバッグ」メニューに移動し、 「プロセスにアタッチ...」をクリックします。右側でプロジェクト名で並べ替え、リストから選択します。
完全なドキュメントが続きます。それまでは、サンプル アプリケーションのソース コードを見てください。
Electron.NET API デモ
この YouTube ビデオでは、新しいプロジェクトの作成方法、Electron.NET API の使用方法、アプリケーションのデバッグ方法、および Windows 用の実行可能なデスクトップ アプリの構築方法を示します: Electron.NET - Getting Started
ここでは Electron.NET CLI も必要です。 ASP.NET Core フォルダーに次のコマンドを入力します。
electronize build /target win
追加のプラットフォームも利用できます。
electronize build /target win
electronize build /target osx
electronize build /target linux
これら 3 つの「デフォルト」ターゲットは、それらのプラットフォーム用の x64 パッケージを生成します。
特定の NuGet パッケージまたは特定のシナリオでは、純粋な x86 アプリケーションを構築することが必要になる場合があります。これらをサポートするには、次のように、目的の .NET Core ランタイム、Electron プラットフォーム、および Electron アーキテクチャを定義できます。
electronize build /target custom " win7-x86;win32 " /electron-arch ia32
最終結果は、 /bin/desktopフォルダーに Electron アプリが作成されるはずです。
macOS ビルドは、Windows ではサポートされていないシンボリックリンクを必要とするため、Windows マシンでは作成できません (この Electron の問題による)。 macOS ビルドは、Linux マシンでも macOS マシンでも作成できます。
最新の Electron.API パッケージに更新した後は、常に最新の Electron.CLI への更新が必要です。さらに、常に NuGet 経由で CLI を更新します。
dotnet tool update ElectronNET.CLI -g
このプロジェクトに参加した貢献者のリストもご覧ください。
バグを見つけた場合は、お気軽にプル リクエストを送信してください (アクティブな問題のリストを確認するには、「問題」セクションにアクセスしてください。すべてのコミットが適切に文書化されていることを確認してください。)
このビデオでは、Electron.NET の開発の概要を説明します: Electron.NET - Contributing Getting Started
このリポジトリは、主要部分 (API および CLI) と、独自の「プレイグラウンド」ASP.NET Core アプリケーションで構成されます。両方の主要部分は、99.0.0 でバージョン管理されたローカル NuGet パッケージを生成します。最初に必要となるのは、ビルド スクリプト (Windows の場合は .cmd または .ps1、macOS/Linux の場合は .sh) の 1 つを実行することです。
純粋なデモ プロジェクトを探している場合は、他のリポジトリをチェックアウトしてください。
このリポジトリを使用する場合の問題は、NuGet が非常に強力なキャッシュを持っていることです。詳細については、ここを参照してください。
私たちはこのオープンソースの作業を自由時間に行っています。もっと時間を費やしたいのであれば、寄付をお願いします。寄付は、一部の問題の優先度を上げるために使用できます。ありがとう!
あるいは、コア メンテナ向けに GitHub スポンサーシップを利用することを検討してください。
サポートをよろしくお願いします! ?
MITライセンス取得済み。詳細については、「ライセンス」を参照してください。
楽しむ!
新しい Electron.NET API および CLI 9.31.2 バージョンもインストールしていることを確認してください。
dotnet tool update ElectronNET.CLI -g
これで、electron-builder が使用され、ビルドに必要な構成がElectron.manifest.jsonファイル (ビルド部分) で行われます。さらに、独自の Electron.NET 構成が (ルートに) 保存されます。
Electron.manifest.jsonファイルが次の新しい構造になっていることを確認してください。
{
"executable" : " {{executable}} " ,
"splashscreen" : {
"imageFile" : " "
},
"name" : " {{executable}} " ,
"author" : " " ,
"singleInstance" : false ,
"build" : {
"appId" : " com.{{executable}}.app " ,
"productName" : " {{executable}} " ,
"copyright" : " Copyright © 2020 " ,
"buildVersion" : " 1.0.0 " ,
"compression" : " maximum " ,
"directories" : {
"output" : " ../../../bin/Desktop "
},
"extraResources" : [
{
"from" : " ./bin " ,
"to" : " bin " ,
"filter" : [ " **/* " ]
}
],
"files" : [
{
"from" : " ./ElectronHostHook/node_modules " ,
"to" : " ElectronHostHook/node_modules " ,
"filter" : [ " **/* " ]
},
" **/* "
]
}
}
バージョン 0.0.9 では、CLI はグローバル ツールではなく、 .csprojに次のように登録する必要がありました。
< ItemGroup >
< DotNetCliToolReference Include = " ElectronNET.CLI " Version = " 0.0.9 " />
</ ItemGroup >
.csprojファイルを編集した後、プロジェクト内で NuGet パッケージを復元する必要があります。 ASP.NET Core フォルダーで次のコマンドを実行します。
dotnet restore
まだこのバージョンを使用している場合は、次のように呼び出す必要があります。
electronize ...
Electron.NET では、IPC が機能するために Node.js 統合が有効になっている必要があります。 IPC 機能を使用していない場合は、次のように Node.js 統合を無効にすることができます。
WebPreferences wp = new WebPreferences ( ) ;
wp . NodeIntegration = false ;
BrowserWindowOptions browserWindowOptions = new BrowserWindowOptions
{
WebPreferences = wp
} ;
ElectronNET.API は、 Startup
クラス内の DI コンテナに追加できます。 Electron で利用可能なモジュールはすべてシングルトンとして追加されます。
using ElectronNET . API ;
public void ConfigureServices ( IServiceCollection services )
{
services . AddElectron ( ) ;
}