2010-12-31 4 views
0

私はここで非常に奇妙な問題があります。アセンブリ内でクラスをインスタンス化しない限り、アセンブリが見つかりませんでしたエラーが発生します。例えばアセンブリ内のクラスを最初にインスタンス化しない限り、参照されているアセンブリでAssembly.Load(String)を実行できません。の解き方?

:ファインワークス

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

new someClassInAssembly(); 

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo); 
Object mq = Activator.CreateInstance(mqType); 

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo); 
Object mq = Activator.CreateInstance(mqType); 

はAssembly.Load

この上にFileNotFound例外をスローします。はい、Assembly.Loadの後にインスタンス化されていても、コンパイル時には明らかに問題になります。実行時にアセンブリがロードされ、見つけられることを明示的に確認するにはどうすればいいですか?コンパイルの設定はどこにありますか?何が必要ですか?

答えて

0

パスを供給することにより、あなたはあなたがロードしていると思うアセンブリをロードしていることを確認します:

AssemblyName an = AssemblyName.GetAssemblyName(filePath); 
Assembly.Load(an); 
0

を正直なところ、その1つだけの参照や一握りのは、どこかにそれを明示的に参照を追加した場合あなたに多くの労力をかけません。

//Use a static constructor somewhere appropriate. 
static someClass(){ 
    new AssemblyYouCareAbout.Object(); 
} 

選択肢がGACにDLLを追加するには、実行中のプロセスのビンに手動でDLLを運搬するかのラインに沿っています。私はむしろエレガントでない静的なコンストラクタを使用していきたいと思います。

関連する問題