如何使用MarshalByRefObject来调用不同应用程序域中的类

时间:2013-12-07 11:57:09

标签: c# reflection .net-assembly marshalbyrefobject

我正在尝试将此处http://msdn.microsoft.com/en-us/library/System.MarshalByRefObject(v=vs.110).aspx的示例1版本实现到我的代码中。

我的目标是使用某些方法创建一个类,然后将该类加载到不同的appdomain中并调用其方法。

到目前为止,我有:

 public class diffDomain : MarshalByRefObject
 {
      public int getNumber()
      {
           return 5;
      }
 }
 internal static class JITCompiler
 {
      internal static wantNumber()
      {
           AppDomain domain = AppDomain.CreateDomain("MyDomain");
           var newSearch = (diffDomain)domain.CreateInstanceAndUnwrap(
                            Assembly.GetExecutingAssembly().FullName,
                            "diffDomain");
      }
 }

我在Var newSearch线上收到错误:

Could not load type 'diffDomain' from assembly 'SVM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

2 个答案:

答案 0 :(得分:2)

您的程序集/命名空间可能不正确。为避免此类错误,请尝试以下操作:

var newSearch = (diffDomain)domain.CreateInstanceAndUnwrap(
                            typeof(diffDomain).Assembly.FullName,
                            typeof(diffDomain).FullName);

答案 1 :(得分:0)

您提出的问题不是您的真实代码,因为它有明显的语法错误。

您提出的问题也没有证明您遇到的问题,因为您排除了相关信息。

我认为你所做的就是将你的类放在命名空间中。 CreateInstanceAndUnwrap需要一个完全限定的名称。您链接的示例将类放在全局命名空间中,因此非限定名称和限定名称是相同的。他们可能不在你正在尝试的事情中。