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

眺める: 59779|答える: 9

[出典] .NETプラグインのための「動的置換」

[リンクをコピー]
2021年8月15日 21:55:14に投稿 | | |
例えば、私たちのサービスシステムが一連の機能的サービスを提供し、将来的にさらに新しい機能的サービスが追加され、機能的サービスの変更や削除が必要になる場合を想像してください。 このようなサービスシステムに対する一般的な基本要件は、機能的なサービスを追加・削除・更新する際にサービスシステムの動作を停止できないことです。 通常、「ホットスワッププラグイン」は各サービスをプラグインdllにカプセル化することで非常に簡単に実装できますが、「ホット置換」(「動的置換」)が問題となります。 その理由は、プラグインのDLLをサービスシステムからアンインストールすると、サービスシステムがそのDLLへの基礎参照を保持し続け、DLLを削除または上書きしようとするとWindowsが「dllが使用中です」というメッセージを出せるからです。

では、この問題をどう解決すればよいのでしょうか? 少なくとも2つの選択肢があると思います。

(1) AppDomainを使用する。 新しいAppDomainでプラグインを読み込み、その後アプリドメインをアンインストールすると、プラグインのdllがサービスシステムからきれいに解除されます。 このアプローチの欠点は、多くのAppDomainを管理しなければならないこと(機能的なサービスが非常に多いため)こと、またAppDomain間の通信がリモートで行われるため、システムに多くの不必要な頭痛の種をもたらしていることです。 興味があればこの方法も試してみてください。私は後者を使うのが好きです。

(2) プラグインのDllをメモリにコピーし、その後Dllをメモリに読み込む。 このようにして、ハードドライブ上のDLLは自由に上書きまたは削除できます。 以前は、ハードドライブから直接プラグインDllを読み込んでいました。このように:

さて、私たちは新たな方向転換を進めます。


これによりプラグインの「動的置換」の問題が解決されます。





先の:Spring CloudはすべてのリクエストインターフェースログをMongoDBに記録します
次に:.NET/C# は、下線されたフィールド名を大きなハンプ形式に変換します
2021年8月15日 23:11:28に投稿 |
こんなに大きなプロジェクトだから、夜にサーバーを再起動したほうがいい...
2021年8月17日 14:43:41に投稿 |
シェアしてくれてありがとう!~』
2021年9月16日 18:25:58 に投稿 |
テスト応答
2021年9月17日 21:39:18に投稿 |
覚えてみろ
2021年9月18日 19:05:29に投稿 |
この投稿は2021年9月18日19:07にfyxh66によって最後に編集されました。

System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。”IL 格式不正确。
  • var dll = Assembly.Load(addinStream);
86も試したが、@小slagはない。ボスは時間がある。見てみるのを手伝ってくれている。
 地主| 2021年9月18日 22:08:32 に投稿 |
FYXH66 2021年9月18日 19:05 投稿
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

この問題は経験したことがありません。

System.BadImageFormatException例外が発生する状況は2つあります。プログラムのターゲットプラットフォームが一貫していない>参照dllファイルのシステムプラットフォームが一貫していないことです。

確認:メインプログラムとプラグインDLLの.NETバージョンは一貫していて、ターゲットプラットフォームも一貫しているのか、それともDLLは.NET上で開発されていないのか?
2021年9月19日 16:17:56 に投稿 |
2021年9月18日 22:08公開
この問題は経験したことがありません。

System.BadImageFormatException例外が発生する状況は2つあります。プログラムのターゲットプラットフォームが参照dll>一貫性がない...

はい、C++のdll...
 地主| 2021年9月19日 17:01:33に投稿 |

これは明らかに良くありません。ここで動的プラグインは.NET DLLしか読み込めず、C++を呼び出すDLLはこのように調整されていません
2021年9月19日 18:54:53に投稿 |
シャオザ 2021年9月19日 17:01 投稿
これは明らかに良くありません。ここで動的プラグインは.net DLLしか読み込めず、C++を呼び出すDLLはこのように調整されていません...

Dllのバイトセットを直接使い、C++でdllを呼び出す方法はありますか?
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com