Я только что выполнил простой тест:
Я создал две сборки с кодом:
первая сборка (называемая test1.dll
)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test1
{
public class Class1
{
public void SayHello()
{
System.Windows.Forms.MessageBox.Show("Test!");
}
}
}
вторая сборка (называемая test1.dll
тоже):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test1
{
public class Class1
{
public void SayHello()
{
System.Windows.Forms.MessageBox.Show("Im a new Test!");
}
}
}
и приложение для вызывающего абонента (форма с двумя кнопками):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Asseblies
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private System.Reflection.Assembly _assembly1 = null;
private System.Reflection.Assembly _assembly2 = null;
private void button1_Click(object sender, EventArgs e)
{
if (System.Object.Equals(_assembly1,null))
{
_assembly1 = System.Reflection.Assembly.LoadFrom(@".\test1\test1.dll");
}
object inst = _assembly1.CreateInstance("Test1.Class1");
inst.GetType().InvokeMember("SayHello", System.Reflection.BindingFlags.InvokeMethod, null, inst, null);
}
private void button2_Click(object sender, EventArgs e)
{
if (System.Object.Equals(_assembly2, null))
{
_assembly2 = System.Reflection.Assembly.LoadFrom(@".\test2\test1.dll");
}
object inst = _assembly2.CreateInstance("Test1.Class1");
inst.GetType().InvokeMember("SayHello", System.Reflection.BindingFlags.InvokeMethod, null, inst, null);
}
}
}
После этого приложение и приложение для вызывающего абонента размещаются следующим образом:
AppDir
|
- CallerApp.exe
|
- test1
| |
| - test1.dll <-- my first assembly
|
- test2
|
- test1.dll <-- my second assembly
Во время теста у меня нет ошибок, и методы, которые я вызываю, дали мне соответствующие результаты.Может быть, вы используете иную технику создания / вызова инстансов, чем я?
Я верю, что ваша проблема связана с контекстом привязки, способом, которым вы вызываете методы или создаете экземпляры.Есть хороший пост в блоге о связывании контекста - http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx это может вам помочь.