使用CodeDom与ILMerge合并的已删除的Dll文件

时间:2017-03-25 23:40:00

标签: c# embedded-resource codedom ilmerge

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

以下代码显示如何从binfoler引用外部库:

    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()

1 个答案:

答案 0 :(得分:0)

将原始exe文件与dll直接合并而得的exe文件直接包含dll中的类型。所以你应该能够引用那个exe文件,它的行为应该就像你引用了所有的dll一样。

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

class ThisIsDllFoo {}