You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Roslyn为动态编译的DLL添加属性/详情?

给Roslyn动态生成的DLL添加文件属性/详情的方法

要给Roslyn运行时编译出的DLL加文件详情,核心是在编译阶段注入程序集级别的特性,这些特性会自动映射到DLL属性里的公司、版本、描述等字段,具体操作如下:

1. 定义程序集特性代码

先写一段包含程序集特性的代码片段,对应你要设置的各项文件属性:

using System.Reflection;

// 对应文件详情里的"公司"字段
[assembly: AssemblyCompany("你的公司名称")]
// 对应"产品名称"字段
[assembly: AssemblyProduct("你的产品名")]
// 对应"产品版本"字段
[assembly: AssemblyVersion("1.0.0.0")]
// 对应"文件版本"字段
[assembly: AssemblyFileVersion("1.0.0.0")]
// 对应"描述"字段
[assembly: AssemblyDescription("运行时动态编译生成的DLL文件")]
// 可选:添加版权信息,对应"版权"字段
[assembly: AssemblyCopyright("Copyright © 2024 你的公司")]

2. 将特性代码加入Roslyn编译流程

把上面的特性代码和你的业务代码一起作为编译单元,传入Roslyn的CSharpCompilation对象中,示例代码:

// 你的业务逻辑代码
string businessCode = @"
namespace DynamicModule
{
    public class DynamicService
    {
        public string GetMessage() => ""从动态DLL返回的消息"";
    }
}";

// 程序集特性代码
string assemblyAttrCode = @"
using System.Reflection;
[assembly: AssemblyCompany(""MyTechCorp"")]
[assembly: AssemblyProduct(""DynamicRuntimeDLL"")]
[assembly: AssemblyVersion(""1.0.0.0"")]
[assembly: AssemblyFileVersion(""1.0.0.0"")]
[assembly: AssemblyDescription(""Roslyn运行时编译生成的动态链接库"")]
[assembly: AssemblyCopyright(""Copyright © 2024 MyTechCorp"")]";

// 解析代码为语法树
var businessSyntaxTree = CSharpSyntaxTree.ParseText(businessCode);
var attrSyntaxTree = CSharpSyntaxTree.ParseText(assemblyAttrCode);

// 设置编译选项,指定输出为DLL
var compileOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);

// 创建编译对象,包含业务代码和特性代码的语法树
var compilation = CSharpCompilation.Create(
    assemblyName: "DynamicAssembly.dll",
    syntaxTrees: new[] { businessSyntaxTree, attrSyntaxTree },
    references: new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) },
    options: compileOptions
);

// 生成DLL文件
using var memoryStream = new MemoryStream();
var emitResult = compilation.Emit(memoryStream);

if (emitResult.Success)
{
    // 将生成的DLL写入磁盘
    File.WriteAllBytes("DynamicAssembly.dll", memoryStream.ToArray());
}

3. 验证效果

编译完成后,找到生成的DLL文件,右键→属性→详细信息,就能看到你设置的所有属性已生效,和你示例图里的字段对应一致。

内容的提问来源于stack exchange,提问作者Boppity Bop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:30:16