問題タブ [assembly.reflectiononly]
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# - C#Assembly.LoadとAssembly.ReflectionOnlyLoad
Assembly.LoadとAssembly.ReflectionOnlyLoadの違いを理解しようとしています。
以下のコードでは、特定のインターフェイスから継承する特定のアセンブリ内のすべてのオブジェクトを検索しようとしています。
このコードは私にとっては問題なく機能しますが、他のおそらくより良い代替案を調査していて、Assembly.ReflectionOnlyLoad()メソッドに出くわしました。
オブジェクトをロードまたは実行していないので、基本的には、ReflectionOnlyLoadを使用してパフォーマンスをわずかに向上させることができるという定義をクエリするだけだと思いました...
しかし、Assembly.LoadをAssembly.ReflectionOnlyLoadに変更すると、assembly.GetTypes()を呼び出すときに次のエラーが発生することがわかりました。
要求されたタイプの1つ以上をロードできません。詳細については、LoaderExceptionsプロパティを取得してください。
上記のコードは、ライブラリを反映して「見る」だけだと思いました...しかし、これは、ライブラリとその中のオブジェクトを見ると、実際にライブラリをインスタンス化しようとするハイゼンベルグの不確定性原理の一種のインスタンスです。仕方?
ありがとう、マックス
silverlight - mscorlib 2.0.5.0 (別名 Silverlight mscorlib) でリフレクションを介して型を取得していますか?
お気に入りのプログラミング言語 Nemerle に Silverlight サポートを追加しようとしています。
Nemerle は、コンパイル手順で、主に 2 つのステップでリフレクションを介してすべての型をロードします。
1-) Assembly.LoadFrom を使用してアセンブリを読み込みます 2-) Assembly.GetTypes() を使用して型を取得します
次に、コンパイルの最後に、Reflection.Emit で解決された型を出力します。
この手順は、Silverlight の mscorlib を除く、Silverlight を含むすべてのアセンブリで機能します。
c# では、これは失敗します。
しかし、これは合格します:
後者では、 a.GetTypes() は System.Object の親が存在しないという例外をスローします。
抜け道はありますか?
c# - Assembly.ReflectionOnlyLoadFrom を使用して WPF プロジェクトによって参照されるアセンブリをロードするときの奇妙な FileLoadException
アセンブリ内を覗いていくつかの属性メタデータを取得するカスタム MSBuild タスクがあります。
これは、自動化されたビルド/リリース プロセスで使用され、クラス ライブラリ、コンソール アプリ、および Web プロジェクトによって使用および参照されるアセンブリに対して完全に機能しています。MSBuild タスクは、別の MSBuild プロセスがプロジェクトをコンパイルした後に呼び出されます。
昨日、この特定のアセンブリ (.NET 3.5 クラス ライブラリ) を参照する WPF プロジェクトを追加したところ、機能しなくなりました。
WPF プロジェクトによって参照されていない同じソリューション内の別のアセンブリを指すように AssemblyFile を変更しても例外がスローされないため、WPF 関連であることはわかっています。
例外メッセージには、
... already loaded from a different location.
It cannot be loaded from a new location within the same appdomain.
同じ appdomain に関する部分に注意してください。
そこで、この特定の例外をキャッチして CurrentDomain を調べるようにコードを変更しました。
問題のアセンブリが現在のドメインになかったことは言うまでもありません (コンパイルを実行する別の MSBuild プロセスが生成されるため、これは理にかなっている可能性があります)。したがって、エラー メッセージが true であると仮定すると、どこを調べればよいでしょうか。それは住んでいますか?私へのエラーメッセージはそれがCurrentDomainであるべきだと示唆しているので、混乱しています。
または、WPF の経験が豊富な人が、ビルドが成功した後も、このアセンブリがアプリ ドメインにまだ残っている理由を説明できますか?
これは、この例外に遭遇した他の誰かからの別の質問です。
c# - 異なるバージョンの依存関係を共有するアセンブリを反映できません
Assembly.ReflectionOnlyLoadFromを使用したシナリオは次のとおりです。
私のアセンブリInspectedとリフレクション Application Inspectorの両方がAssembly Dependencyを参照しています。
InspectorがDependency 1.0.0.0を参照し、 InspectedがDependency 1.1.0.0を参照する場合、InspectorはDependencyの型を使用するInspectedの型またはメソッドを反映できません。そのようなタイプがヒットした瞬間、次のようになります。
System.IO.FileLoadException: ファイルまたはアセンブリ 'Dependency、Version=1.1.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)
ただし、InspectorはDependency 1.1.0.0自体を正常に反映できるため、 Dependency 1.1.0.0をAssembly.ReflectionOnlyLoadFromとしてロードすると、既にDependency 1.0.0.0を使用しているアセンブリから機能します。
アセンブリをロードし、その依存関係をプリロードするために使用するコードは次のとおりです。
foreach にブレークポイントを設定し、それがロードされていることを確認し、その存在についてAppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()もチェックしたため、 Dependency 1.1.0.0が解決されないという問題ではありません。無事に読み込まれました。しかし、その後assembly.GetTypes()を実行すると、死んでしまいます。
これについて私ができることはありますか、または別の AppDomain のアセンブリを反映し、メタデータをDependency 1.0.0.0への参照を持つ appdomain にマーシャリングする必要がありますか?
reflection - アセンブリで型を取得する:ReflectionTypeLoad例外
ロードされたアセンブリ内のすべてのタイプを取得したかったのです。コードスニペットは次のとおりです
私がimを実行すると、ReflectionTypeLoadExceptionが発生します。コードの間違いは何ですか。
dll - パラメータを使用してインスタンスを作成し、dll からメソッドを呼び出す
dll をロードしてインスタンスを作成し、メソッドを呼び出して戻り値を確認したいと考えています。インスタンスの作成時に、例外 {"Parameter count mismatch."} が発生します。
Q: 1. 何が間違っていますか? 2. メソッドを取得して呼び出し、戻り値を取得するにはどうすればよいですか? 3.これを行うためのより良い方法はありますか?
c# - 参照された dll/ アセンブリから型の詳細を読み取る
DataLayer.dll と ProcessLayer.dll の 2 つの dll ファイルがあります。DataLayer.dll には、以下のような MyClass というクラスがあります。
そして、MyClass として入力パラメーターを持つ 1 つのメソッドを持つ 2 番目のアセンブリ ProcessLayer.dll で DataLayer.dll を参照しました。
ProcessLayer.dll
リフレクションを使用してすべてのメソッド パラメータを読み取るにはどうすればよいですか? 私は使っている
method.GetParameters();
ステートメントを実行しようとするとエラーが発生しました 。
手伝ってくれませんか ?
Mono.cecil でそれを取得する方法はありますか?
c# - ReflectionOnly モードでアセンブリを新しい AppDomain にロードするときに、メソッドに実装がありません
私たちのアプリケーション (65 プロジェクトのソリューション) では、参照されているすべてのアセンブリが実行時に分析され、Ninject モジュールの存在が確認されます (フィルタリングも適用されます)。モジュールは後で Ninject カーネルにロードされ、各モジュールはカーネルのバインディングを宣言します。
参照されたアセンブリをリフレクションのみのモードで別のアセンブリにロードするローダーを採用しました。Ninject がディレクトリからアセンブリをロードする方法との違いは、ディレクトリには、ロードしてはならないモジュールを含むアセンブリを含めることができるということです。また、最初は、参照されているすべてのアセンブリが読み込まれるわけではありません。
問題は、ローダー(Sacha Barber の功績) が一部のアセンブリをロードできないことです。
とLoaderExceptions
1 つのエントリで:
ここにいくつかの「楽しい」事実があります:
- メソッド
BeforeLoad
は仮想であり、インターフェイス メソッドの実装です - 先週、ローダー例外は、別のメソッドには実装がありませんでした (そのメソッドは仮想ではありませんでした) と言っており、後で明示的に実装すると、メソッドが見つからないというメッセージが表示されました。
- 先週、アセンブリのターゲット フレームワーク
AppBaseCore
は .NET 3.5 で、3 つのアセンブリの読み込みに失敗しました - 現在、アセンブリのターゲット フレームワーク
AppBaseCore
は .NET 4 および 5 アセンブリの読み込みに失敗しました - それ以外の場合は、アプリケーションですべて問題ありません
ILSpy と ILDAsm でアセンブリをチェックしたところ、(明らかに) アセンブリに問題はありません。
この時点で、私は本当に迷っており、この問題に取り組む方法がわかりません。
どんな助けでも大歓迎です。
ありがとう
c# - C# Assembly.ReflectionOnlyLoad の軽さ
Unity ゲームでライブラリとして扱う多数のアセンブリがあります。ゲームが開始したら、すべてのファイルのマニフェストだけをすばやく読み取ります (将来的には 50 以上になる可能性があります)。メモリ内にリストを作成します。
著作権と製品情報のフィールドには、読むのに十分な有用な情報をいくつか詰め込みましたが、アセンブリ全体を自分のアプリ ドメインや他のアプリ ドメインにロードしたくはありません。
AssemblyName.GetAssemblyName が最も軽量のようです
ただし、アセンブリ名、バージョン、およびカルチャ情報のみを提供するため、役に立ちません。とにかく、これらにカスタム文字列を含めることはできません(AssemblyInfo.csのコードを使用してカスタム文字列を強制すると、アセンブリはコンパイルに失敗します)
それで、最後のオプションである Assembly.ReflectionOnlyLoadFrom に行き着きます。
これは実際にファイル全体をロードしますか? 属性だけが欲しいので、それは私には多すぎます。
その場合、オプションはありませんが、アセンブリファイルに余分なバイトを自分で追加し、バイト配列を渡す前にバイトを削除する必要があります