2011-06-19 30 views
0

我有一个应用程序,需要在其中创建AppDomain和Load Assembly,并执行Assembly中的方法。在程序集中找不到入口点

这里是我的代码

public class CreateAppDomain 
{ 
    public void CreateAppDom() 
     { 
     AppDomain domain = AppDomain.CreateDomain("myDomain"); 
     domain.ExecuteAssembly(@"C:\Visual Studio 2005\Projects\A1\A1\bin\Debug\A1.dll"); 
     domain.CreateInstanceFrom(@"C:\Visual Studio 2005\Projects\A1\A1\bin\Debug\A1.dll","A1.Navigate"); 
     } 

} 

我上面的代码写在一个叫CreateAppDomain.cs类文件

在我的Default.aspx页面,我创建上述类的实例,并呼吁create方法。这里是代码

protected void Button1_Click(object sender, EventArgs e) 
    { 
     CreateAppDomain obj = new CreateAppDomain(); 
     obj.CreateAppDom(); 
     Response.Write("Application Domain Successfully created"); 
    } 

当我运行Default.aspx页,我得到一个错误说

在程序集'A1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'中找不到入口点。

任何人都可以向我解释上述错误的含义和解决方案。

谢谢,

回答

5

AppDomain.ExecuteAssembly()方法加载的组件插入指定的域,然后执行它的标准的入口点即static void Main(string[] args)方法。

查看here了解详情。

你想要什么可能是CreateInstanceAndUnwrap() method

编辑的重载之一:

我创建ConsoleApplication9,除了ClassLibrary1的补充。在ClassLibrary1的我有Class1

namespace ClassLibrary1 
{ 
    public class Class1 : MarshalByRefObject 
    { 
     public void Go() 
     { 
      Console.WriteLine("My AppDomain's FriendlyName is: {0}", AppDomain.CurrentDomain.FriendlyName); 
     } 
    } 
} 

在ConsoleApplication9这些的:

private static void Main(string[] args) 
{ 
    Console.WriteLine("Trying to run method in current domain..."); 
    var inCurrentDomain = new Class1(); 
    inCurrentDomain.Go(); 

    Console.WriteLine("\nTrying to run method in remote domain..."); 
    string asmName = typeof(Class1).Assembly.FullName; 
    string typeName = typeof (Class1).FullName; 
    Console.WriteLine("Class1's assembly name is: {0}\nType name: {1}", asmName, typeName); 

    var remoteDomain = AppDomain.CreateDomain("My remote domain"); 
    var remoteObject = (Class1)remoteDomain.CreateInstanceAndUnwrap(asmName, typeName); 
    Console.WriteLine("\nRemote instance created. Running Go() method:"); 
    remoteObject.Go(); 
} 

运行时,我有:

Trying to run method in current domain... 
My AppDomain's FriendlyName is: ConsoleApplication9.exe 

Trying to run method in remote domain... 
Class1's assembly name is: ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
Type name: ClassLibrary1.Class1 

Remote instance created. Running Go() method: 
My AppDomain's FriendlyName is: My remote domain 
+0

是的,但是你没有静态无效主要在.dlls它只是在应用程序(CLI或GUI),例如。 .exe文件。 – 2011-06-19 19:49:47

+0

你说得对。入口点在元数据中设置并可以更改。无论如何,根据我的理解,这不是OP所要求的。他想在远程域中创建一个实例并调用它,而不是执行任何命名的单个方法。 –

+0

Thanx ..我尝试使用CreateInstanceAndUnwrap()而不是createInstanceFrom(),但没有运气我得到了同样的错误 – user490706