发布时间:2026-10-03 04:06:01 浏览次数:0
在C#开发中经常会用到动态加载程序集的功能,而C#中的Assembly.Load方法则是用于动态加载程序集的方法之一。本文将详细讲解C# Assembly.Load方法的用法及两个实例。
Assembly类是.NET Framework中最重要的类之一,它代表了一个装配件,即在.NET Framework中编写、编译和部署的代码模块的集合。而Assembly.Load方法则是Assembly类中的一个方法,它用于动态加载一个装配件并返回它的Assembly实例。这个方法的参数可以是装配件的文件名、路径名和原始二进制数据,可以加载已经存在于磁盘上的装配件,也可以将装配件加载到内存中。
Assembly.Load方法有多种不同的使用方式,具体如下:
这种方式需要知道程序集的文件名和路径,示例代码如下:
Assembly assembly = Assembly.LoadFrom("file.dll");这种方式将byte数组中的数据作为程序集加载到内存,示例代码如下:
byte[] rawAssembly = File.ReadAllBytes("file.dll");Assembly assembly = Assembly.Load(rawAssembly);下面为大家介绍两个C# Assembly.Load方法的实例。
在这个实例中,我们将创建一个类库项目AwesomeLibrary,其中包含一个方法ConcatName。然后在另一个控制台应用程序中使用Assembly.Load方法动态加载AwesomeLibrary程序集,并调用它的ConcatName方法。示例代码如下:
AwesomeLibrary项目中的代码:
public class AwesomeClass{ public string ConcatName(string firstName, string lastName) { return firstName + " " + lastName; }}控制台应用程序中的代码:
Assembly assembly = Assembly.LoadFrom("AwesomeLibrary.dll");Type type = assembly.GetType("AwesomeLibrary.AwesomeClass");dynamic instance = Activator.CreateInstance(type);string fullName = instance.ConcatName("John", "Doe");Console.WriteLine(fullName); // John Doe在这个实例中,我们将创建一个接口ILogger和一个WinForm应用程序,然后在另一个控制台应用程序中使用Assembly.Load方法动态加载WinForm应用程序集,并实现它的ILogger接口。示例代码如下:
接口ILogger的代码:
public interface ILogger{ void Log(string message);}WinForm应用程序的代码:
public partial class Form1 : Form, ILogger{ public Form1() { InitializeComponent(); } public void Log(string message) { textBox1.AppendText(message + "\n"); }}控制台应用程序中的代码:
Assembly assembly = Assembly.LoadFrom("WinFormApp.exe");Type type = assembly.GetType("WinFormApp.Form1");dynamic instance = Activator.CreateInstance(type);ILogger logger = instance as ILogger;logger.Log("Hello Dynamic Assembly");//将输出Hello Dynamic Assembly到WinForm的TextBox中通过以上两个案例,我们可以看到C# Assembly.Load方法的使用方法和实际应用。该方法为C#开发人员提供了一个方法动态加载程序集的便利,使得我们能够更加灵活开发应用程序。