問題タブ [assembly.load]

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 に答える
13031 参照

c# - プログラムでNUnitを実行する方法

NUnitを参照し、単一のテストメソッドで単一のテストクラスを作成するアセンブリがいくつかあります。このアセンブリへのファイルシステムパスを取得できます(例:「C:... \ test.dll」)。プログラムでNUnitを使用して、このアセンブリに対して実行したいと思います。

これまでのところ:

ただし、runner.Load(path)を呼び出すと、FileNotFound例外がスローされます。スタックトレースから、問題はNUnitがスタックのAssembly.Load(path)を呼び出すことにあることがわかります。パスを「Test、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null」のように変更しても、同じエラーが発生します。

AppDomain.Current.AssemblyResolveにイベントハンドラーを追加して、このタイプを手動で解決できるかどうかを確認しましたが、ハンドラーが呼び出されません。

Assembly.Load(...)を機能させる秘訣は何ですか?

0 投票する
5 に答える
34325 参照

c# - C#Assembly.LoadとAssembly.ReflectionOnlyLoad

Assembly.LoadとAssembly.ReflectionOnlyLoadの違いを理解しようとしています。

以下のコードでは、特定のインターフェイスから継承する特定のアセンブリ内のすべてのオブジェクトを検索しようとしています。

このコードは私にとっては問題なく機能しますが、他のおそらくより良い代替案を調査していて、Assembly.ReflectionOnlyLoad()メソッドに出くわしました。

オブジェクトをロードまたは実行していないので、基本的には、ReflectionOnlyLoadを使用してパフォーマンスをわずかに向上させることができるという定義をクエリするだけだと思いました...

しかし、Assembly.LoadをAssembly.ReflectionOnlyLoadに変更すると、assembly.GetTypes()を呼び出すときに次のエラーが発生することがわかりました。

要求されたタイプの1つ以上をロードできません。詳細については、LoaderExceptionsプロパティを取得してください。

上記のコードは、ライブラリを反映して「見る」だけだと思いました...しかし、これは、ライブラリとその中のオブジェクトを見ると、実際にライブラリをインスタンス化しようとするハイゼンベルグの不確定性原理の一種のインスタンスです。仕方?

ありがとう、マックス

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

c# - C# assembly.load from a byte[] の問題

バイト配列に読み込まれた EXE があり、Assembly.Load を使用してそれをアセンブリ オブジェクトに読み込もうとしています。ロードしようとするとエラーが発生します。

例外の原因となっているコードは次のとおりです。

bin は私のバイト配列で、EXE からロードされます。

これが私が得ている例外です:

ファイルまたはアセンブリ 'calc_tester からロードされた 109590 バイト、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null' またはその依存関係の 1 つをロードできませんでした。不正な形式のプログラムをロードしようとしました。

どんな助けでも大歓迎です。

0 投票する
5 に答える
2399 参照

c# - .NET でのアセンブリ バインディングの問題

さまざまな理由で GAC に登録できない .NET ライブラリを作成しています。この dll (SDK.dll と呼びましょう) は、他の DLL に依存してロードされます。

この SDK.dll を使用するプログラムを作成しているときに、プログラムが dll の読み込みに失敗し、FileNotFoundException がスローされることに気付きました。これは、参照されている SDK.dll を見つけることはできたものの、CLR がその依存関係を読み込めなかったために発生します。

この問題を解決するために私が見つけた唯一の方法は、SDK.dll とそのすべての依存関係を「ローカルにコピー」すること (展開の問題のために実行できないこと)、またはプログラムを SDK.dll と同じディレクトリにコンパイルすることです。

その場所に関係なく、その依存関係を探す場所を SDK.dll に伝える方法はありますか? おそらくSDK.dll.configファイルが役に立ちますか?

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

reflection - アセンブリを 1 回だけロードする

実行時にアセンブリをロードしていますが、コードを呼び出すたびに発生する問題は、その特定のアセンブリが既にロードされているかどうかを確認する必要があるかということです。それとも.Netがこれを処理し、1つのアセンブリ(同じバージョン)を1回しかロードできませんか? ここでの基本的な質問は、読み込まれたアセンブリのリストを反復処理して、アセンブリが既に読み込まれているかどうかを確認する必要があるかどうかです。ありがとう

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

.net - Assembly.LoadFrom と Assembly.Load を使用してアセンブリの読み込みを混在させると、奇妙な動作が発生する

とを使用してアセンブリの読み込みを混在させると、奇妙な動作が発生しAssembly.LoadFromますAssembly.Load

Assembly.LoadFromでアセンブリをロードし、後で でアセンブリをロードするときに、奇妙な動作に遭遇しましたAssembly.Load。を使用してアセンブリをロードしてAssembly.LoadFromいます。アセンブリは、実行フォルダーではないフォルダーにあります。

後でテストコードで、このアセンブリをもう一度ロードしようとすると、アセンブリが既にロードされているにもかかわらず、(「ファイルまたはアセンブリをロードできませんでした...」)Assembly.Loadでロードが失敗します。System.IO.FileNotFoundException読み込みは、厳密な名前と厳密でない名前の両方で失敗します (このアセンブリを再び読み込む本来の理由は、 の使用ですBinaryFormatter)。

ただし、アセンブリが実行フォルダーに配置されている場合、厳密な名前と厳密でない名前の両方の場合で、後の読み込みは成功します。この場合、2 つの同一のアセンブリが 2 つの異なる場所から読み込まれていることがわかります。

この問題を再現する簡単なコード サンプル:

  1. CLR が既に読み込まれたアセンブリを無視する理由は何ですか?
  2. どうすればこの問題を軽減できますか?
0 投票する
3 に答える
2195 参照

c# - Win32 DLL を参照するアセンブリを読み込むにはどうすればよいですか?

リフレクションを使用してプラグインをロードする .NET アプリケーションを開発しています。私のプラグインは C# クラス ライブラリです。問題は、プラグインの一部が従来の Win32 DLL を参照していて、C# が盲目的に依存関係を .NET DLL であるかのようにロードしようとしていることです。

プラグインをロードする方法は次のとおりです。

System.BadImageFormatExceptionのメッセージが表示されます。

Win32 DLL を参照するアセンブリをプログラムで読み込むにはどうすればよいですか?

0 投票する
4 に答える
880 参照

c# - ロードできないアセンブリの代わりにフォールバック アセンブリを提供するにはどうすればよいですか?

実行時に、参照されたアセンブリが「厳密な名前の検証に失敗しました」などでロードに失敗した場合 (テスト署名されているため)、実際に署名された別のパスから代替アセンブリを提供する方法はありますか?

AppDomain.CurrentDomain.AssemblyResolve にサブスクライブしようとしましたが、技術的に「不良」アセンブリが存在するため、起動されません。ロードできないだけです。

アセンブリを読み込めない場合にフォールバック アセンブリを提供する一般的な方法はありますか?

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

.net - XCOPY 配置を使用してアセンブリとその依存関係を動的に読み込む

アプリケーションを動的にロードするアプリケーション ローダーがあります。アプリケーションは、すべての依存関係が 1 つのフォルダーにあるアセンブリです。XCOPY デプロイメントを使用すると、フォルダーをコピー/削除することでアプリケーションを追加/削除できます。標準の .NET アセンブリ バインドを容易にするために、ローダーのビンの下にアプリケーション フォルダーをコピーします。構成ファイルにプローブの privatePath を設定すると、すべてが魅力的に機能します。

アプリケーションは、フレームワーク、つまり共有アセンブリを依存として使用します。

ここで、各アプリケーションが独自のバージョンのフレームワークを使用できる必要があるという要件があります。

フレームワークのバージョンを GAC にインストールすると、これは完全に機能し、さまざまなバージョンのアセンブリがデフォルトの AppDomain に正常に読み込まれます。

ここで、XCOPY ソリューションに戻り、対応するアプリケーション フォルダーに正しいフレームワーク バージョンをコピーすると、ソリューションが機能しなくなります。

そのフレームワークを参照する最初のアプリケーションは正常に動作しますが、2 番目のアプリケーションはアセンブリが見つからず、マニフェストが一致しないと不平を言います。

アセンブリと "privatePath" 内のフォルダーが最初に一致した後、.NET ローダーがプローブを停止し、それ以上検索しないように見えます。

GAC を使用する場合と同じ動作をさせる方法についてのアイデアはありますか? config、codeBaseで指定できるものは他にありますか? (絶対ファイル パスは使用しないでください)。

kr、ミシェル

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

.net - Assembly.Load(Byte [])およびAssembly.Location / Assembly.Codebase

ファイルをロックせずにアセンブリをロードしようとしています。これらのアセンブリはサードパーティのアセンブリである可能性があるため、必ずしもコードにアクセスできるとは限りません。そのうちの1つまたは2つは、Assembly.Locationを使用して、ディレクトリからファイルを読み取ります。

シャドウコピーを介してこれを実行できることは承知していますが、正しく機能させるのは非常に困難であり、特定のフォーラムの一部のユーザーは、アセンブリをバイト配列にロードし、Assembly.Load(Byte [])オーバーロードを使用することを推奨しています。Assembly.Locationは空の文字列を返し、Assembly.Codebaseはアセンブリをロードするアプリケーションの場所を返すため、これは、これらのアセンブリの1つが親ディレクトリ内のファイルにアクセスしようとするまでうまく機能します。

ロードしているアセンブリのCodebaseまたはLocationプロパティを何らかの方法で設定するためにできることはありますか?コードベースと場所に関するMSDNドキュメントでは、それらはオーバーライド可能なプロパティとして定義されています-それは、ホスティングアプリケーションからそれらをオーバーライドできることを意味しますか?