2010-12-14 12 views
0

Visual Studio 2008 - フレームワーク3.5 - Visual Basic反射と静的メソッドに奇妙な問題があります

こんにちは! 私はリフレクションによって呼び出される静的メソッドに問題があります。 私のwin-wpfの読み込み時に、オリジナルの同じディレクトリに "_temp.dll"という名前の "A4Library.dll"のコピーを作成します。

Dim AssemblyFileName As String = Directory.GetCurrentDirectory() & "\_temp.dll" 
Dim oAssembly As Assembly = Assembly.LoadFrom(AssemblyFileName) 
Dim TypeName As String = "MyLibrary.MyService" 
Dim t As Type = oAssembly.GetType(TypeName) 
Dim mi As MethodInfo = t.GetMethod("MyMethod", BindingFlags.Static AndAlso BindingFlags.Public) 
Dim bResponse As Boolean = mi.Invoke(Nothing, New Object() {MyPar1, MyPar2}) 

しかし、私は.exeファイルが同じディレクトリにない場合にのみ、これはうまく機能: はその後、ボタンクリックイベントに、私はこのように_temp.dll上の静的メソッドを呼び出します.dllファイルがないと、このエラーが発生します。

InnerException {タイプが[B] MyTypeの[A] MyTypeのキャスト不可能...タイプAは、位置 'F:\ MyPath \ A4Library.dll'。タイプBは... 'F:\ MyPath_temp.dll'という位置の 'LoadFrom'というコンテキストで生成されています。 "}

これは変ですに元の.dllの同じメソッドと競合することがありますが、コピーではなくオリジナルを調べる理由がわかりません。プリンシパルアセンブリに関連する.exeファイルが別のディレクトリに配置されている場合は、すべて正常に動作します。

私は、.dllの同じフォルダに.exeを持っていますが、どうすれば問題を解決できますか?

ありがとうございました! Pileggi

答えて

1

静的メソッドを実行する前にアセンブリのコピーを作成するのはなぜですか?コピーを作成する必要がある場合は、そのアセンブリを別のAppDomainにロードし、そこでメソッドを実行します。

+0

ありがとうございました!私は時々.dllを置き換える必要があるので、これを行う必要があります。また、すでにロードされているアセンブリを実行時にアンロードすることは非常に難しいと思います。 – lamarmora