問題タブ [assembly-loading]
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# - ファイルをロックせずにアセンブリをロードし、適切なバインディングコンテキストを維持します
私は手ごわい難問に立ち向かいました。これが私の状況です:
プラグインフレームワークを使用してアプリケーションを構築しています。すべてのプラグインが拡張する必要のある基本プラグインクラスがあります。同じ同じアセンブリ内に、クラスをシリアル化および逆シリアル化するヘルパークラスがあります。これはジェネリッククラスであり、あらゆる場所で使用されています。構造は次のようになります。
問題
私の問題は、アセンブリのロードとファイルのロックです。アプリの要件は、プラグインをいつでも上書きできることです。その場合は、リロードする必要があります。ロックされないように(つまり、アプリの実行中に上書きしたり吹き飛ばしたりできるように)アセンブリをロードするのが最善の方法のようです。
プラグインアセンブリのロードは問題なく機能します。問題はありません。プラグインアセンブリにあるMyPlugin.cs内から、を使用HelperCollection
して逆シリアル化を実行しようとすると、例外が発生します。例は次のようになります。
それは爆破し、InvalidCastException
それがだということわざを投げてい"Unable to cast object of type 'List[Foo]' to 'List[Foo]'"
ます。多くの調査の後、私はついにその理由を見つけました。LoadNetherバインディングコンテキストにロードされます。
がFoo
(MyPlugin.dllから)読み込まれると、LoadNeither
バインディングコンテキストにあり、型変換の型を含むアセンブリ(私の場合はMyApp.dll)が既定のコンテキストで読み込まれます。したがって、同じ名前であっても、同じタイプとは見なされません。私が使用しているので、これを行っていAssembly.Load(byte[])
ます。
質問
どうすればこれを回避できますか?どうやって、
- アセンブリをロードし、ファイルをロックしないでください。
- ロードされたアセンブリにあるオブジェクトをキャストできるように、適切なバインディングコンテキストを提供します。
テキストの壁で申し訳ありませんが、関連するすべての情報を入手したかっただけです。
c# - InMemory コンパイル済みアセンブリを現在のドメインにロードする
を使用CSharpCodeProvider
してアセンブリをコンパイルしていますが、物理ファイルを作成したくないため、CompileParameters
GenerateInMemory
プロパティを に設定しています。true
コンパイル後、次のCompilerResults
ようなことを行うことができます:-
期待どおりの出力が得られましたCreateInstance
。うまくいきました。
AppDomain
ただし、アセンブリに関するそのような知識がなくても、現在の型にアクセスできる必要があります。私はこのようなことをする必要があります:-
問題は、このコードt
が null になってしまうことです。アセンブリはコンパイルされていますが、ロードされていないと思われます。このアセンブリをドメインにロードして、その型名を解決できるようにする方法を見つけることができないようです。
誰でも私を啓発できますか?
prism - MEFアセンブリのロード宣言
Prismでは、動的にロードされたアセンブリから、ロードアセンブリがいつどのように初期化するかを宣言することができます。つまり、次のクラス属性を配置できます。
[ModuleExport(typeof(MyModule)、InitializationMode = InitializationMode.WhenAvailable)]
これにより、モジュールがロードされるときにモジュールが初期化されます。
MEFでも同じことができる機能を探していましたが、まだあまり詳しくありません。MSDNとドキュメントを検索してみましたが、あまり表示されませんでした。
よろしくお願いします!
.net - アセンブリの読み込みをデバッグする方法 - ConfigurationErrorsException
ローカルでは問題なく動作するアプリケーションを持っていますが、デプロイすると次のエラーが表示されます。
Assembly Binding Log Viewer を使用してアセンブリ バインディング ログを表示しようとしましたが、オンにしても、上記のスタック トレース以外の情報は得られず、ログは空のままのようです。それが不平を言っているアセンブリが存在し、その表面には、依存するすべてのアセンブリが存在します。サーバーの問題をデバッグするために他に何ができますか?
c# - *ATTEMPTED* アセンブリ解決のために呼び出される AppDomain イベント
アセンブリが解決される前に呼び出される、フックできるイベントはありますか。
たとえば、AppDomain の一部のコードが Assembly.Load(path) を呼び出している場合、このアセンブリを読み込もうとしているというイベントが発生しますか?
これは、一部のコンポーネントでハードコーディングされている可能性のあるアセンブリの読み込みをリダイレクトするのに役立ちます。
可能であれば、構成からこれを行うことも有効なオプションです。
助言がありますか ?
security - Assembly.LoadFrom(String、Evidence)呼び出しをAssembly.LoadFrom(String)-.NET4に置き換えます
古い.NET 2
コードを.NET 4
プロジェクトに移動する必要があります。次の行があります:
Microsoft(MSDN)で述べたように:
注:このAPIは廃止されました。廃止されていない代替手段はLoadFrom(String)です。
私はそのEvidence
クラスに精通していません。呼び出しからパラメーターを削除するだけのリスクは何ですか?パラメータが必要なEvidence
場合の実際のケースは何ですか?Evidence
助けてくれてありがとう
c# - アセンブリの読み込み、型の作成、およびキャッシュ
ObjectFactory
アセンブリのパスとそのアセンブリ内の型の名前を指定すると、リフレクションを使用して同じ型のインスタンスを返すようなものを書き込もうとしています。いくつかの異なるアセンブリの型に対してこの操作を繰り返し行う必要があるためAssembly.LoadFrom
、特定の型の新しいインスタンスが必要になるたびに使用する必要がありますか?それとも、結果のAssembly
オブジェクトと型作成メソッドへのデリゲートをキャッシュする必要がありますか?
unity-container - Unity に読み込まれていないアセンブリに型を登録するにはどうすればよいですか?
インターフェイスのすべてのタイプをロードして、メソッドを呼び出すことができるようにします。ただし、アセンブリはコンパイル時に参照されません。それらはbinフォルダーにあります。
これはUnityで簡単にできることですか?
たとえば、次のようなコードがあります。
もちろん、アセンブリは bin フォルダーにドロップされたばかりなので、モジュールは何も解決されません。現在のアセンブリでは静的に参照されていません。
または、何らかの種類の Assemblies.LoadAssembly() を実行する必要がありますか。これをできるだけ動的にしたいと思います。可能であれば、構成ファイルまたはコードでアセンブリ名を指定する必要はありません。
前もって感謝します。
.net - LoadFromとコンテキスト
Assembly.LoadFrom
アプリケーションベースパスの外部に格納されているアセンブリ(A)を介してロードしています。ロードするアセンブリは、同じディレクトリにある別の.netアセンブリ(B)を参照します。
Aアセンブリのいくつかのメソッドを使用しようとすると、Fusionログは、システムがA.dllの親ディレクトリではなくアプリケーションベースディレクトリからB.dllを読み込もうとしていることを示しています。
にリスナーを追加しました。これは、送信者が「コンテキストポリシーがありません。」というメッセージを持ち、プロパティがに設定されてAppDomain.CurrentDomain.AssemblyResolve
いる場合に呼び出されます。AppDomain
ResolveEventArgs.RequestingAssembly
null
LoadFrom
親ディレクトリでアセンブリの依存関係を検索することを許可するべきではありませんか?