将 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 {}
我使用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 {}