【问题标题】:Using CodeDom with empeded Dll files merged by ILMerge将 CodeDom 与 ILMerge 合并的 empeded Dll 文件一起使用
【发布时间】:2017-03-25 23:40:00
【问题描述】:

我使用 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()

【问题讨论】:

  • 你试过只引用合并的 exe 吗?
  • 耶。它正在工作:):)。请写下您的评论作为答案,我会接受。
  • 其他问题:如何检查某些dll文件是否被合并以控制从exe文件或bin文件夹加载程序集(以防不合并)?

标签: c# embedded-resource codedom ilmerge


【解决方案1】:

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

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

class ThisIsDllFoo {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多