C# 正在尝试创建可作为参数c在应用程序域之间传递的类#

C# 正在尝试创建可作为参数c在应用程序域之间传递的类#,c#,serialization,appdomain,C#,Serialization,Appdomain,这就是我想做的: 我创建了一个类,希望它成为两个应用程序域之间传递的参数。在文件ClassLibrary1.dll中: [Serializable] public class MyClass { public string mystr = "NotWorking!"; public MyClass(string _mystr) { mystr = _mystr;

这就是我想做的:

我创建了一个类,希望它成为两个应用程序域之间传递的参数。在文件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
}
public interface IOtherDomainClass
{
    MyClass getParam();
    void setParam(MyClass _param);
}
并在iotherdomainclass.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
}
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'.
对不起,说来话长,我不确定我做错了什么。或者如果所有的代码从一开始就是错误的,你能帮我重新创建它吗


非常感谢

> p>由于您创建的< MyClass > <代码>类型在尚未加载在第二个AppDe域中的程序集中,请考虑将该程序集直接加载在第二个AppDevices中。

示例类比需要的复杂,因为您没有执行任何需要自定义序列化/反序列化代码的操作。这将更容易维护:

[Serializable]
public class MyClass
{
   public string mystr = "NotWorking!";
   public MyClass(string _mystr)
   {
      mystr = _mystr;
   }
   public override string ToString()
   {
      return mystr;
   }
}

现在在模块窗口中检查它,我可以看到ClassLibrary1.dll的两个外观。这可能是你能想到的其他原因吗?谢谢你当有疑问时,请相信例外。似乎应该装上子弹,但确定会有什么伤害呢?具体查看版本和公钥令牌。foreach(appDomain2.GetAssemblies()中的var assembly)Console.WriteLine(a);//可能是您针对ClassLibrary1 dll的不同版本编译了应用程序。好的,我认为我们正在接近这个问题。foreach引发异常:无法加载文件或程序集“OtherDomainClass,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。系统找不到文件。是否会导致foreach程序集代码在第二个AppDomain中运行?您还可以打印出assembly.Location。这将告诉您程序集在磁盘上的位置。运行该程序后,我得到的输出是:ClassLibrary1.dll已加载请添加完整异常和stacktrace。在控制台应用程序中运行该方案时,发现了有趣的问题。它工作正常,但在单元测试中运行时,它会抛出我编写的异常。什么单元测试您使用的是什么框架?你能发布完整的异常和堆栈跟踪吗?