将预编译的MSIL文件链接到程序集中?

有什么方法可以预编译MSIL文件,然后在编译时将.net链接器链接到.net程序集中?

所以,例如。 我有一个项目。 我编译它,反编译为MSIL,并调整MSIL。

现在,我想编译和链接那个微调的msil文件到另一个项目中。

是的,I + COULD +将它重新编译为一个单独的程序集并仅供参考,但在这种特殊情况下,我无法做到这一点。 MSIL的内容实际上需要在目标程序集中。

任何想法,如果这是可能的? 到目前为止,我没有找到任何运气。

- 编辑 - 一个建议是ILMerge,它可能会起作用。 我现在将抓取最新的副本,并会看到这些展会。 我遇到的唯一问题是,在过去,我发现合并后调试很困难(或者至少比我没有使用ILmerge更困难)。 我希望可以调整proj文件以将编译后的MSIL作为构建过程的一部分直接包含在内,因此所有内容都可以继续在IDE中轻松调试。

- 编辑 - 好吧,看起来不像ILMerge将适用于这种情况首先,我得到这样的消息:合并期间发生异常:(TaskId:32)ILMerge.Merge:程序集'Blah'未标记为包含只有托管代码。 (TaskId:32)(考虑使用/ zeroPeKind选项 - 但首先阅读文档!)(TaskId:32)at ILMerging.ILMerge.Merge()(TaskId:32)at ILMerging.ILMerge.Main(String [] args )(TaskId:32)

好。 所以,到底是什么,我加入/ zeropekind并重试。

没有错误!

但是,在这种特殊情况下,被合并的DLL在MSIL中调整了几个函数,并将其导出为CDECL函数。 在合并的dll中,它们不再被导出。

大鼠。

回到原点。


您可以使用ILMerge将多个程序集合并为一个,因此您可以调整您的msil,使其成为一个单独的程序集,然后将它们合并到第一个程序集中。

另一种方法是将你的微软MSIL作为嵌入式资源加载到你的第一个程序集中(这意味着你的微调的msil程序集必须在引用它之前创建)然后在运行时你可以读取嵌入的字节[]资源放入一个Assembly,加载到AppDomain中。

第三种更激进的方法是反编译这两个程序集,并将输出的msil文件合并为1,然后将其重新编译为程序集。 你只需要注意两组msil代码之间的命名冲突,但是因为你可以把msil转储到一个纯文本文件中,所以编写一些实用程序来重新组合它们应该不是那么困难......尽管,这基本上就是ILMerge的东西,除了它从2个程序集开始,而不是文本文件中的msil代码。


如前所述,使用ILMerge来合并程序集。

另外,您可以使用DLLExport实用程序来显示标记为CDECL的功能。

看到这些链接:
http://www.darinhiggins.com/self-registering-com-net-assemblies/
http://www.vbfengshui.com/exposing-c-style-entry-points-in-a-net-assembly-revisited/

链接地址: http://www.djcxy.com/p/36065.html

上一篇: Linking a precompiled MSIL file into an assembly?

下一篇: toolchain or IDE? (debugger question)