c#动态生成dll
时间: 2023-07-27 15:15:10 浏览: 153
要动态生成 DLL,可以使用 C# 中的 System.Reflection.Emit 命名空间。以下是一个简单的示例代码,可以动态生成一个简单的 DLL:
```csharp
using System;
using System.Reflection;
using System.Reflection.Emit;
class Program
{
static void Main(string[] args)
{
// 创建程序集
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
// 创建模块
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule", "DynamicAssembly.dll");
// 创建类型
TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
// 添加方法
MethodBuilder methodBuilder = typeBuilder.DefineMethod("HelloWorld", MethodAttributes.Public | MethodAttributes.Static, typeof(void), null);
ILGenerator ilGenerator = methodBuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldstr, "Hello, world!");
ilGenerator.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }));
ilGenerator.Emit(OpCodes.Ret);
// 完成类型
Type dynamicType = typeBuilder.CreateType();
// 调用方法
dynamicType.GetMethod("HelloWorld").Invoke(null, null);
// 保存程序集
assemblyBuilder.Save("DynamicAssembly.dll");
}
}
```
上面的代码会生成一个名为 DynamicAssembly.dll 的 DLL,并在其中动态创建一个名为 DynamicType 的类型,该类型有一个名为 HelloWorld 的方法,该方法会输出字符串 "Hello, world!"。
请注意,上面的代码只是一个示例,实际中可能需要更多的代码来动态生成更复杂的 DLL。
阅读全文