c# 動態生成程序集dll

動態生成程序集,指定版本號,如果需要引用程序集,可以添加一個類的代碼,可以是個空類,也可以將一些文件嵌入到dll裏。

CSharpCodeProvider codeProvider = new CSharpCodeProvider();
                System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
                parameters.ReferencedAssemblies.Add(@"System.dll");
                parameters.GenerateExecutable = false;
                parameters.GenerateInMemory = false;
                parameters.OutputAssembly = appStartupPath + "\\Task\\" + $"{projectAssembleName}.dll";


                parameters.EmbeddedResources.Add(zipFileName);

                CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, @"
using System;
using System.Reflection;
[assembly: AssemblyVersion(""1.0.0.0"")] 
[assembly: AssemblyFileVersion(""1.0.0.0"")]

namespace " + projectAssembleName + @"
    {
        public class Referenced
        {
        }
    }");

如果程序需要引用該程序集,或者需要獲取該程序集可以先引用一個類,這樣程序集就會加載到主程序域中,如果只是引用了程序集,代碼裏沒有引用程序集的元數據,程序集不會加載到主程序域中

 Referenced project = new Referenced();//引用任務dll,加載任務程序集

可以通過這種方式獲取引用的程序集

 Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(m => m.FullName == $"{ProjectAssembleName}, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章