这就是我想要做的事情:
我创建了一个类,我想成为将在两个应用程序域之间传递的参数。在文件ClassLibrary1.dll中:
[Serializable]
public class MyClass
{
public string mystr = "NotWorking!";
public MyClass(string _mystr)
{
mystr = _mystr;
}
public override string ToString()
{
return mystr;
}
}
然后我创建了另一个类,它将把myClass作为参数重新放在otherdomainclass.dll中:
public class OtherDomainClass : MarshalByRefObject, IOtherDomainClass
{
#region Implementation of IOtherDomainClass
private MyClass my;
public MyClass getParam()
{
return my;
}
public void setParam(MyClass _param)
{
my = _param;
}
#endregion
}
并在iotherdomainclass.dll中定义了该类的接口:
public interface IOtherDomainClass
{
MyClass getParam();
void setParam(MyClass _param);
}
现在我正在尝试运行以下测试:
[TestMethod()]
public void PassMyclassBetweenDomains()
{
domain = AppDomain.CreateDomain(appDomainName);
otherClass = domain.CreateInstanceFromAndUnwrap(location, "OtherDomain.OtherDomainClass") as IOtherDomainClass;
Assert.IsNotNull(otherClass);
otherClass.setParam(new MyClass("Working!"));
string sparam = otherClass.getParam().ToString();
Assert.AreEqual(sparam, "Working!");
AppDomain.Unload(domain);
}
测试失败并出现以下错误:
Test method SerizalizableDataTypesTest.ParamCollectionTest.PassMyclassBetweenDomains threw exception
System.Runtime.Serialization.SerializationException: Unable to find assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
对于长篇故事感到抱歉我不确定我做错了什么部分。或者,如果从一开始所有代码都是错误的,请你帮我重新创建它。
非常感谢!!!
答案 0 :(得分:3)
由于您创建的MyClass
类型位于第二个AppDomain中尚未加载的程序集中,请考虑直接在第二个AppDomain中加载该程序集。
您的示例类比它需要的更复杂,因为您没有做任何需要自定义序列化/反序列化代码的事情。这将更容易维护:
[Serializable]
public class MyClass
{
public string mystr = "NotWorking!";
public MyClass(string _mystr)
{
mystr = _mystr;
}
public override string ToString()
{
return mystr;
}
}