我使用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()
答案 0 :(得分:0)
将原始exe文件与dll直接合并而得的exe文件直接包含dll中的类型。所以你应该能够引用那个exe文件,它的行为应该就像你引用了所有的dll一样。
我不知道是否有一些特殊方法可以检查某些dll是否已合并到已加载的exe中。你可以做的一种方法是检查exe中是否存在dll中的某种类型,可能是一种特殊的标记类型,例如:
class ThisIsDllFoo {}