动态编译程序集
目标
借助 CSharpCodeProvider
编译出程序集,并给程序集文件附加特性,如版本号,描述信息等,下面直接上代码。
var unit = new CodeCompileUnit();
var attr = new CodeTypeReference(typeof(AssemblyVersionAttribute));
var decl = new CodeAttributeDeclaration(attr,
new CodeAttributeArgument(new CodePrimitiveExpression(Assembly.GetExecutingAssembly().GetName().Version.ToString())));
unit.AssemblyCustomAttributes.Add(decl);
var desc = new CodeTypeReference(typeof(AssemblyDescriptionAttribute));
var descDeclar = new CodeAttributeDeclaration(desc,
new CodeAttributeArgument(new CodePrimitiveExpression($"this is desc: 3.405.0.0")));
unit.AssemblyCustomAttributes.Add(descDeclar);
using (var provider = new CSharpCodeProvider())
{
if (GeneratePlcResourceFile(resourceFilePath) && provider.Supports(GeneratorSupport.Resources))
parameters.EmbeddedResources.Add(resourceFilePath);
var assemblyInfo = new StringWriter();
provider.GenerateCodeFromCompileUnit(unit, assemblyInfo, new CodeGeneratorOptions());
var result = provider.CompileAssemblyFromSource(parameters, new[] { sourceCode, assemblyInfo });
}