2017-03-08 26 views
1

ソリューションの一部であるプロジェクトによって構築されたLabというアセンブリがあります。このアセンブリには、同じソリューション上の別のアセンブリからの反射を使用してアクセスしたいオブジェクトが含まれています。 (BL呼ばれる)は、他のアセンブリでは、私は、次のコードを持っている:アセンブリをロードできませんC#

Assembly assembly = Assembly.Load("Lab"); 

問題は、私はラボアセンブリからオブジェクトを開始しようとする行を追加しない限り、それはFileNotFoundExceptionを投げていることですコードのどこにでも置くことができます。 コンパイラがLabアセンブリをAssembly.Load関数の認識可能な場所にロードしているかのようにします。これは本当に私を混乱

、 は、私は完全なアセンブリ名 を渡してみましたし、またAssembly.LoadFromではなく、すべてのケースで、無駄、同じ問題にアセンブリの絶対パスを渡そうとしました。

オブジェクトのトラフリフレクションにアクセスしようとしている理由は、コードが単なるモジュールの一部であるためです。そして、反映されたdll(この場合はLab.dll)は実行時に動的に渡されます。 として実際

ソリューション

Avnerを説明し、私が疑われ、それを使用しています何のコードがなかったので、アセンブリは、プロジェクトのフォルダにコピーされませんでした。 さらに、アセンブリが欠落していることが、Lordkainのコメントに記載されている例外のFusionLogであることが証明されています。

プロジェクトのアイデアは、今後渡されるアセンブリパスを使用することであるため、Avnerで提案されているソリューションとは対照的に、すぐにその部分を実装することにしました。 だから方法で、アセンブリの名前の代わりに、アセンブリのパスを使用して:

Assembly.LoadFrom(*Assembly Path*); 

は私が不足しているアセンブリの問題を中心に働きました。

+0

これはあなたにとって有用です。https://indexoutofrange.com/Could_not_load_file_or_assembly_or_one_of_its_dependencies/ – lordkain

+0

アセンブリ名の長い形式を指定する必要があります。たとえば、 'System、Version = 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089' – DavidG

答えて

1

BLプロジェクトの出力フォルダを確認してください。おそらく、そこにLab.dllは見つかりません。これは、Visual Studioが参考になることがあるため、Lab.dllを使用する認識可能なコードがないことがわかり、実際に出力フォルダにコピーするのは煩わしいからです。リフレクションを使用すると、静的解析では用途が見つからず、参照が最適化されます。

この回答アドレスこの問題は、しかし別の角度から:

あなたのケースであなたは番目の手の参照に問題を持っていないので

MSBuild doesn't copy references (DLL files) if using project dependencies in solution

が、動的ロードと、そのオプション# 1は無関係で、Lab.dllの項目を参照することに注意してください(注:参照:必ずしもをインスタンス化する必要はありません)。

あなたは、リンクされた回答が表示されているかのように、Lab.dllからオブジェクトのタイプを取得するか、クラスの静的プロパティにアクセスすることでそれを行うことができます。醜い、しかし効果的。

関連する問題