如何解决试图创建可在应用程序域之间传递的类作为参数c#
|| 那就是我想要做的: 我创建了我想成为将在两个应用程序域之间传递的参数的类。在文件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\'.
抱歉,长话短说,我不确定我做错了什么。或者,如果所有代码从一开始都是错误的,请您帮我重新创建它。
非常感谢你!!!
解决方法
由于您创建的“ 5”类型位于尚未在第二个AppDomain中加载的程序集中,请考虑直接在第二个AppDomain中加载该程序集。
您的示例类比需要的复杂,因为您没有执行任何需要自定义序列化/反序列化代码的操作。这将更易于维护:
[Serializable]
public class MyClass
{
public string mystr = \"NotWorking!\";
public MyClass(string _mystr)
{
mystr = _mystr;
}
public override string ToString()
{
return mystr;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。