次のような状況があります。 n個のフォルダには、それぞれ含む2つのアセンブリは、ありますC#Reflection、AppDomain:異なるフォルダから同じアセンブリを実行
Assembly1.dllとAssembly2.dll
すべてAssembly1.dllのあるまったく同じ
すべてAssembly2.dllさんわずかに異なりますが、同じクラス/メソッドを持っています。
私のプログラムでは
をAssembly2.dllするすべてのAssembly1.dllの参照、私はAssembly1内部のいくつかのクラスのインスタンスを作成し、そのクラスのメソッドを呼び出すしたいと思います:
for(int i = 0; i < 100; i++)
{
Assembly myAssembly1 = Assembly.LoadFrom("Directory"+ i + "\\Assembly1.dll");
Type myType = myAssembly1.GetType("MyClass");
object myObject = Activator.CreateInstance(myType);
myType.Invoke(myMethodName, BindingFlags.InvokeMethod, null, myObject, null);
}
このコードは、Assembly1.dllを含むフォルダごとに実行されます 問題は、最初のものはうまくいきますが、後でAssembly2.dllが既に読み込まれているため、再読み込みされません。ただし、現在のフォルダー(番号i)の内側に置き換える必要があります。これは若干異なるためです。
上記のコードを呼び出すたびに、同じアセンブリ2が使用されます。
私はすでに同様の質問を探しており、カスタムの使用に関するいくつかの提案を見つけました。AppDomains私はこれを試しましたが、正しく動作させることができませんでした。
誰かが、新しいAppDomainを初期化し、上記のコードをこの新しいドメイン内で実行して(参照されたAssembly2.dllが正しくロードされ、アンロードされるようにする)コード例を挙げることができますか?
または、誰かがその問題の解決方法について異なる考えを持っていますか?
幸運を祈り、 クリスチャン
解決策を別の答えに移動して、正しいものとしてマークしてください。 –