将 CodeDom 与由 ILMerge 合并的嵌入的 Dll 文件一起使用

Using CodeDom with empeded Dll files merged by ILMerge

我使用CodeDom编译运行时生成的动态c#代码,并在内存中执行。 CodeDom 引用已安装的外部 nuget 库,它位于 bin 文件夹中。

以下代码展示了如何从 bininfoler 引用外部库:

    CompilerParameters cp = new CompilerParameters();
    //dll are in binFolder  
    var dll = Directory.EnumerateFiles(binFolder, "*.dll").ToArray();
    cp.ReferencedAssemblies.AddRange(dll);
    cp.GenerateExecutable = false;      
    cp.GenerateInMemory = true;

程序运行良好。

我想使用ILMerg将exe和所有dll文件合并到一个可执行文件中 所以,我应该修改行:

         var dll = Directory.EnumerateFiles(binFolder, "*.dll").ToArray();

成为:

    // how to load the empeded dll by ILMerge to be passed to CompilerParameters cp
    var dll = get_the_empeded_dll_by_ILMerge() ;

你能帮忙实现这个功能吗:get_the_empeded_dll_by_ILMerge()

将您的原始 exe 文件合并到您的 dll 中产生的 exe 文件直接包含您的 dll 中的类型。所以您应该能够引用该 exe 文件,并且它的行为应该就像您引用了所有 dll 文件一样。

我不知道是否有一些特殊的方法来检查某些dll是否已合并到加载的exe中。一种方法是检查 dll 中的某种类型是否存在于 exe 中,可能是一种特殊的标记类型,例如:

class ThisIsDllFoo {}