問題タブ [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.

0 投票する
2 に答える
5933 参照

c# - ファイルをロックせずにアセンブリをロードし、適切なバインディングコンテキストを維持します

私は手ごわい難問に立ち向かいました。これが私の状況です:

プラグインフレームワークを使用してアプリケーションを構築しています。すべてのプラグインが拡張する必要のある基本プラグインクラスがあります。同じ同じアセンブリ内に、クラスをシリアル化および逆シリアル化するヘルパークラスがあります。これはジェネリッククラスであり、あらゆる場所で使用されています。構造は次のようになります。

問題

私の問題は、アセンブリのロードとファイルのロックです。アプリの要件は、プラグインをいつでも上書きできることです。その場合は、リロードする必要があります。ロックされないように(つまり、アプリの実行中に上書きしたり吹き飛ばしたりできるように)アセンブリをロードするのが最善の方法のようです。

プラグインアセンブリのロードは問題なく機能します。問題はありません。プラグインアセンブリにあるMyPlugin.cs内から、を使用HelperCollectionして逆シリアル化を実行しようとすると、例外が発生します。例は次のようになります。

それは爆破し、InvalidCastExceptionそれがだということわざを投げてい"Unable to cast object of type 'List[Foo]' to 'List[Foo]'"ます。多くの調査の後、私はついにその理由を見つけましたLoadNetherバインディングコンテキストにロードされます。

FooMyPlugin.dllから)読み込まれると、LoadNeitherバインディングコンテキストにあり、型変換の型を含むアセンブリ(私の場合はMyApp.dll)が既定のコンテキストで読み込まれます。したがって、同じ名前であっても、同じタイプとは見なされません。私が使用しているので、これを行っていAssembly.Load(byte[])ます。

質問

どうすればこれを回避できますか?どうやって、

  1. アセンブリをロードし、ファイルをロックしないでください。
  2. ロードされたアセンブリにあるオブジェクトをキャストできるように、適切なバインディングコンテキストを提供します。

テキストの壁で申し訳ありませんが、関連するすべての情報を入手したかっただけです。

0 投票する
2 に答える
2881 参照

c# - InMemory コンパイル済みアセンブリを現在のドメインにロードする

を使用CSharpCodeProviderしてアセンブリをコンパイルしていますが、物理ファイルを作成したくないため、CompileParameters GenerateInMemoryプロパティを に設定しています。true

コンパイル後、次のCompilerResultsようなことを行うことができます:-

期待どおりの出力が得られましたCreateInstance。うまくいきました。

AppDomainただし、アセンブリに関するそのような知識がなくても、現在の型にアクセスできる必要があります。私はこのようなことをする必要があります:-

問題は、このコードtが null になってしまうことです。アセンブリはコンパイルされていますが、ロードされていないと思われます。このアセンブリをドメインにロードして、その型名を解決できるようにする方法を見つけることができないようです。

誰でも私を啓発できますか?

0 投票する
2 に答える
204 参照

prism - MEFアセンブリのロード宣言

Prismでは、動的にロードされたアセンブリから、ロードアセンブリがいつどのように初期化するかを宣言することができます。つまり、次のクラス属性を配置できます。

[ModuleExport(typeof(MyModule)、InitializationMode = InitializationMode.WhenAvailable)]

これにより、モジュールがロードされるときにモジュールが初期化されます。

MEFでも同じことができる機能を探していましたが、まだあまり詳しくありません。MSDNとドキュメントを検索してみましたが、あまり表示されませんでした。

よろしくお願いします!

0 投票する
1 に答える
1593 参照

.net - アセンブリの読み込みをデバッグする方法 - ConfigurationErrorsException

ローカルでは問題なく動作するアプリケーションを持っていますが、デプロイすると次のエラーが表示されます。

Assembly Binding Log Viewer を使用してアセンブリ バインディング ログを表示しようとしましたが、オンにしても、上記のスタック トレース以外の情報は得られず、ログは空のままのようです。それが不平を言っているアセンブリが存在し、その表面には、依存するすべてのアセンブリが存在します。サーバーの問題をデバッグするために他に何ができますか?

0 投票する
2 に答える
133 参照

c# - *ATTEMPTED* アセンブリ解決のために呼び出される AppDomain イベント

アセンブリが解決されるに呼び出される、フックできるイベントはありますか。

たとえば、AppDomain の一部のコードが Assembly.Load(path) を呼び出している場合、このアセンブリを読み込もうとしているというイベントが発生しますか?

これは、一部のコンポーネントでハードコーディングされている可能性のあるアセンブリの読み込みをリダイレクトするのに役立ちます。

可能であれば、構成からこれを行うことも有効なオプションです。

助言がありますか ?

0 投票する
1 に答える
1168 参照

security - Assembly.LoadFrom(String、Evidence)呼び出しをAssembly.LoadFrom(String)-.NET4に置き換えます

古い.NET 2コードを.NET 4プロジェクトに移動する必要があります。次の行があります:

Microsoft(MSDN)で述べたように:

注:このAPIは廃止されました。廃止されていない代替手段はLoadFrom(String)です。

私はそのEvidenceクラスに精通していません。呼び出しからパラメーターを削除するだけのリスクは何ですか?パラメータが必要なEvidence場合の実際のケースは何ですか?Evidence

助けてくれてありがとう

0 投票する
2 に答える
658 参照

c# - アセンブリの読み込み、型の作成、およびキャッシュ

ObjectFactoryアセンブリのパスとそのアセンブリ内の型の名前を指定すると、リフレクションを使用して同じ型のインスタンスを返すようなものを書き込もうとしています。いくつかの異なるアセンブリの型に対してこの操作を繰り返し行う必要があるためAssembly.LoadFrom、特定の型の新しいインスタンスが必要になるたびに使用する必要がありますか?それとも、結果のAssemblyオブジェクトと型作成メソッドへのデリゲートをキャッシュする必要がありますか?

0 投票する
1 に答える
1725 参照

unity-container - Unity に読み込まれていないアセンブリに型を登録するにはどうすればよいですか?

インターフェイスのすべてのタイプをロードして、メソッドを呼び出すことができるようにします。ただし、アセンブリはコンパイル時に参照されません。それらはbinフォルダーにあります。

これはUnityで簡単にできることですか?

たとえば、次のようなコードがあります。

もちろん、アセンブリは bin フォルダーにドロップされたばかりなので、モジュールは何も解決されません。現在のアセンブリでは静的に参照されていません。

または、何らかの種類の Assemblies.LoadAssembly() を実行する必要がありますか。これをできるだけ動的にしたいと思います。可能であれば、構成ファイルまたはコードでアセンブリ名を指定する必要はありません。

前もって感謝します。

0 投票する
2 に答える
2516 参照

.net - LoadFromとコンテキスト

Assembly.LoadFromアプリケーションベースパスの外部に格納されているアセンブリ(A)を介してロードしています。ロードするアセンブリは、同じディレクトリにある別の.netアセンブリ(B)を参照します。

Aアセンブリのいくつかのメソッドを使用しようとすると、Fusionログは、システムがA.dllの親ディレクトリではなくアプリケーションベースディレクトリからB.dllを読み込もうとしていることを示しています。

にリスナーを追加しました。これは、送信者が「コンテキストポリシーがありません。」というメッセージを持ち、プロパティがに設定されてAppDomain.CurrentDomain.AssemblyResolveいる場合に呼び出されます。AppDomainResolveEventArgs.RequestingAssemblynull

LoadFrom親ディレクトリでアセンブリの依存関係を検索することを許可するべきではありませんか?