問題タブ [appdomain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 別の AppDomain への DLL の読み込み
メイン アプリケーションとは異なるセキュリティまたはベースパスで実行されるように、1 つまたは複数の DLL を動的にロードしたいと考えています。これらの DLL を別の AppDomain にロードし、そこからオブジェクトをインスタンス化するにはどうすればよいですか?
.net - AppDomain の使用の良い例
インタビューで AppDomains についてよく聞かれますが、基本的なことは知っています。
- それらはアプリケーション内の分離レベルです(アプリケーションとは異なります)
- それらはスレッドを持つことができます(スレッドとは異なります)
- あるアプリドメインの例外は別のアプリドメインには影響しません
- アプリドメインは互いのメモリにアクセスできません
- 各アプリドメインは異なるセキュリティを持つことができます
私はまだそれらを必要とするものを理解していません。合理的な具体的な状況を探しています。
答え:
- 信頼できないコード
- コア アプリケーションの保護
信頼されていない/サード パーティのプラグインは、セキュリティ制限のある別のアプリケーション ドメインに分離することで、共有メモリの破損やレジストリまたはハード ドライブへの無許可のアクセスを禁止し、アプリケーションまたはサーバーを保護します。例: ASP.NET および SQL Server ホスティング コンポーネント コード - 信頼できるコード
安全で独立した機能に分割された安定性アプリケーション- アーキテクチャの柔軟性
1 つの CLR インスタンス内で複数のアプリケーションを実行したり、各プログラムを個別に実行したりできる自由。
他に何か?
c# - プライマリ AppDomain からアセンブリをアンロードする方法は?
メインの AppDomain に読み込まれたアセンブリをアンロードする方法を知りたいです。
次のコードがあります。
完了したら、このアセンブリをアンロードできるようにする必要があります。
ご協力いただきありがとうございます。
c# - AppDomain と現在のディレクトリ
Environment.CurrentDirectory のディレクトリ スワップ メソッドを利用するクラスがあります。コードは次のようになります。
以前の投稿と同様に、このディレクトリ切り替え方法を使用して、指定されたアセンブリ、参照アセンブリ、およびアンマネージ アセンブリを読み込むことができます。私が抱えている問題は、この関数が 2 つの別々の AppDomains で実行されていることです。AppDomain A (私が作成した AppDomain) では、コードは正常に動作します。AppDomain B (デフォルトの AppDomain) では、FileNotFoundException がスローされます。両方の呼び出しで、同じアセンブリを読み込もうとしています。なぜこれが当てはまるのか、手がかりはありますか?
.net - ランタイム呼び出し可能ラッパー (RCW) スコープ - プロセスまたはアプリケーション ドメイン?
アンマネージ COM オブジェクトを参照するときのランタイム呼び出し可能ラッパー (RCW) のスコープは何ですか? ドキュメントによると:
ランタイムは、そのオブジェクトに存在する参照の数に関係なく、COM オブジェクトごとに正確に 1 つの RCW を作成します。
「推測」しなければならない場合、この説明は「プロセスごとに1つ」を意味するはずですが、それは本当ですか? 追加のドキュメントは大歓迎です。
私のアプリケーションは独自のアプリケーション ドメイン (Outlook アドイン) で実行されます。カウントが 0 になるまでループで Marshal.ReleaseComObject(x) を使用するとどうなるかを知りたいです (推奨)。他のアドイン (同じ Outlook プロセス内の他のアプリケーション ドメインで実行されているもの) から参照を解放しますか?
編集:パーフェクト - 今、混乱はさらに大きくなっています。2 つの回答 (Lette と Ilya から) に基づいて、2 つの異なる回答があります。MSDNの公式ドキュメントにはプロセスごと (ver. 2.0 以降の場合) と書かれていますが、ver. 2.0 以降ではこの文がありません。ドキュメントの1.1。
同時に、Mason Bendixen の記事では、それは appdomain ごとであると述べています。
彼の記事は古い (2007 年 4 月) ため、明確化を求めるメールを彼に送信しましたが、他の誰かが何かを追加する必要がある場合は、追加してください。
ありがとう
c# - アプリケーションが作成したアプリケーション ドメインのリストを取得するにはどうすればよいですか?
長時間実行されるタスクの使用中に AppDomain を作成するサービス アプリがあります。一意の ID を持つ Hashtable に格納することで、これらを追跡してきました。
タスクが完了すると、サービス アプリはそのタスクに割り当てられた AppDomain をアンロードし、appdomain Hashtable から削除します。
純粋にサニティ チェックの観点から、CLR にクエリを実行して、作成中のアプリ ドメインによってまだ読み込まれているアプリ ドメインを確認する方法はありますか (つまり、トラッキング ハッシュテーブルを CLR が実際に見ているものと比較できます)。
c# - 実際には AppDomain.CurrentDomain.BaseDirectory と Application.ExecutablePath の違いは何ですか?
MSDN によると、BaseDirectory は AppDomain がロードする DLL を探す場所であり、ExecutablePath は元の実行可能ファイル (ファイル名を含む) へのパスを提供します。一方にはファイル名があり、もう一方にはありません。新しい AppDomain を作成すると、別のパスを指定できることがわかっています。しかし、ExecutablePath からファイル名を削除し、AppDomain を 1 つだけ使用していると仮定すると、実際には、これら 2 つのパスの違いは何ですか? それらは常に同じになりますか (ここでも、AppDomain が 1 つだけであると仮定します)? それらが異なる場合はありますか?
mono - c#でDLLを実行してから削除する
コードの大部分が別のDLLにある自己更新アプリを作成しています。これはコマンドラインであり、最終的にはMonoで実行されます。このコードをコマンドラインのWindowsのC#で機能させようとしています。
実行中にサポートするdllを削除できるac#アプリケーションを作成するにはどうすればよいですか?
ReadLineでは、VersionUpdater.Core.dllはまだ削除からロックされています
ICommandインターフェイスはVersionUpdater.Common.dllにあり、CommandlineアプリとVersionUpdater.Core.dllの両方から参照されます。
c# - C# からリモート アプリ ドメインにスレッドを挿入できますか
別のプロセスで実行されているリモート アプリ ドメインにスレッドを挿入できるかどうか疑問に思っていました。
私の推測では、デバッグ インターフェイス (ICorDebug) を使用してこれを行うことができますが、他の方法があるかどうか疑問に思っていました。
c# - 実行前にMSTEST TestMethodにすべてのシングルトン/静的を強制的にリセットさせる方法は?
Visual Studio 2008 内で MSTEST を使用しています。各テストを実行する前にすべてのグローバル状態がリセットされるように、特定のテスト クラスの各単体テスト メソッドを最初に実行するテストであるかのように動作させるにはどうすればよいですか? TestInitialize、ClassInitialize、AssemblyInitialize などを使用して明示的に世界をクリーンアップしたくありません。例:
このトピックには同様の質問がありましたが、テストが並行して実行されないことが明確になっただけです。テストが連続して実行されることはわかっていますが、メソッドごとに新しい AppDomain を明示的に強制する方法 (またはすべての状態をクリアする同等のもの) はないようです。
理想的には、単体テストの小さなサブセットに対してのみこの動作を指定して、グローバル状態を気にしないテストのために新しい AppDomain を作成するというペナルティを支払う必要がないようにしたいと考えています (大部分の私のテスト)。