この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 2833|答える: 1

[.NET Core] .NET/C#はAssemblyLoadContextに基づくDLLプラグインのホットアップデートを実装しています

[リンクをコピー]
2024年6月28日 14:28:33に投稿 | | | |
要件:ビジネスロジックは複雑でカスタマイズが必要であり、そのようなロジックは別のDLLアセンブリ上でバックグラウンドが動的にアセンブリを更新し、最新のロジックを実行できます。

.NET Coreは.NET FrameworkのようなAppDomainの動的な作成・アンロードをサポートしていないため、プラグインをホットロードする良い方法がこれまで存在しませんでしたが、良いニュースは.NET Coreが3.0以降Collectible Assemblyをサポートしており、アセンブリの読み込み・アンロードに使える再利用可能なAssemblyLoadContextを作成できることです。

AssemblyLoadContextクラス:ハイパーリンクのログインが見えます。

まず、新しいコンソールと3つのライブラリを作成します。すなわち:コンソールアプリ6クラスライブラリスタンダードクラスライブラリ1クラスライブラリ2そのうち、ClassLibrary1およびClassLibrary2ライブラリはClassLibraryStandardのIWorkerインターフェースを継承し、Runメソッドを実装しています。

ClassLibraryStandard コード:

ClassLibrary1 コード:

ClassLibrary2 コード:

ConsoleApp6のコンソールコードは以下の通りです:

コンソールはDLLプラグインで3スレッドのRunメソッドを開き、常に動的に実行され、log4netを使って出力結果を記録し、コンソール上で実行します3秒後にDLLを最新のライブラリに置き換えます

コンソールを1秒または5秒実行した後、現在のAssemblyLoadContextインスタンスのコレクションが出力され、これがロードされたDLLライブラリとなります。

以下に示すように:



プログラムに異常な出力はなく、実行中にプラグインが見つからない状況もありません。 log4netが実行結果を記録する理由は、コンソールがブロックされているためであり、3つのスレッドが連続的に実行できるようにするために、log4netが実行結果を記録しているからです。以下の図に示されています。



2024-06-28 14:24:36,606 情報 11 RollingFile - 1
2024-06-28 14:24:36,606 情報 10 RollingFile - アンインストール開始
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 11 RollingFile - 1
2024-06-28 14:24:36,606 情報 11 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 10 RollingFile - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
2024-06-28 14:24:36,606 情報 13 RollingFile - 1
...
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,607 情報 13 RollingFile - 1
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,606 情報 10 RollingFile - アンインストール完了
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
...
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,607 情報 13 RollingFile - 1
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,607 情報 13 RollingFile - 1
2024-06-28 14:24:36,607 情報 12 RollingFile - 1
2024-06-28 14:24:36,606 情報 11 RollingFile - 1
2024-06-28 14:24:36,607 情報 13 RollingFile - 2
2024-06-28 14:24:36,607 情報 12 RollingFile - 2

添付config.xml構成:

(終わり)




先の:QRCODEについて QRコードのフォールトトレランスレベル
次に:.NET/C#はPDFsharpを使って複数のPDFファイルを1つに統合します
 地主| 2024年7月6日 16:59:30に投稿 |
Roslynを使ってC#コードを動的にコンパイルし、実行します
https://www.itsvse.com/thread-10786-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com