使用c#语言开发web应用程序,代码页的扩展名是,在另一个应用程序域中执行代码(C# 编程指南) - C# 编程指南...

一旦将程序集加载到应用程序域中,就可以执行该程序集所包含的代码。最简单的加载方法是使用 AssemblyLoad,它会将程序集加载到当前应用程序域中,并从程序集的默认入口点开始运行代码。

如果希望将该程序集加载到另外一个应用程序域中,可以使用 ExecuteAssembly 或 ExecuteAssemblyByName,或者使用这些方法的其他重载版本之一。

如果想从默认入口点以外的位置执行另一个程序集,可在远程程序集中定义一个从 MarshalByRefObject 派生的新类型。然后在应用程序中使用 CreateInstance 创建该类型的一个实例。

请考虑下面的文件,它创建一个包含一个命名空间和两个类的程序集。假设此程序集已经生成,并以 HelloWorldRemote.exe 为名存储在驱动器 C 上。

C#

复制代码

// This namespace contains code to be called.

namespace HelloWorldRemote

{

public class RemoteObject : System.MarshalByRefObject

{

public RemoteObject()

{

System.Console.WriteLine("Hello, World! (RemoteObject Constructor)");

}

}

class Program

{

static void Main()

{

System.Console.WriteLine("Hello, World! (Main method)");

}

}

}

为了从其他应用程序访问该代码,可以将该程序集加载到当前应用程序域中,或创建新的应用程序域并将该程序集加载到其中。如果使用 Assembly.LoadFrom 将程序集加载到当前应用程序域中,您可以使用 Assembly.CreateInstance 来实例化 RemoteObject 类的实例,这样将导致执行对象构造函数。

C#

复制代码

static void Main()

{

// Load the assembly into the current appdomain:

System.Reflection.Assembly newAssembly = System.Reflection.Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");

// Instantiate RemoteObject:

newAssembly.CreateInstance("HelloWorldRemote.RemoteObject");

}

将程序集加载到一个单独的应用程序域时,应使用 AppDomain.ExecuteAssembly 来访问默认入口点,或使用 AppDomain.CreateInstance 创建 RemoteObject 类的实例。创建该实例将导致执行构造函数。

C#

复制代码

static void Main()

{

System.AppDomain NewAppDomain = System.AppDomain.CreateDomain("NewApplicationDomain");

// Load the assembly and call the default entry point:

NewAppDomain.ExecuteAssembly(@"c:\HelloWorldRemote.exe");

// Create an instance of RemoteObject:

NewAppDomain.CreateInstanceFrom(@"c:\HelloWorldRemote.exe", "HelloWorldRemote.RemoteObject");

}

如果不想以编程方式加载程序集,可以从“解决方案资源管理器”中使用“添加引用”来指定程序集 HelloWorldRemote.exe。然后向应用程序的 using 块中添加一个 using HelloWorldRemote; 指令,并在程序中使用 RemoteObject 类型来声明 RemoteObject 对象的一个实例,如下所示:

C#

复制代码

static void Main()

{

// This code creates an instance of RemoteObject, assuming HelloWorldRemote has been added as a reference:

HelloWorldRemote.RemoteObject o = new HelloWorldRemote.RemoteObject();

}

请参见

概念

C# 编程指南应用程序域概述应用程序域和程序集对应用程序域进行编程

参考

应用程序域(C# 编程指南)

其他资源

应用程序域使用应用程序域和程序集编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值