可以从本机Win32程序调用.NET VM(mscorlib)来执行IL /其他内部编译的代码格式吗?

时间:2010-09-07 17:53:54

标签: .net virtual-machine portable-executable mscorlib

旧问题: 我有一个带有IL(.NET)代码的.exe(PE)。 启动时,会调用mscorlib.dll(.NET框架)函数来启动IL代码。 我可以提取.NET代码段并将其附加到其他程序(调用mscorlib.dll来执行该段)吗?

新问题:

我想将已编译的代码从C#.NET程序追加到可以在没有任何.NET运行时的情况下运行的本机纯Win32应用程序,并通过动态调用mscorlib.dll的函数来执行它(如果存在.NET)。这就像一个“可执行的joiner”技术,而不是本机编译。

我不想将一些.NET .exe写入临时目录并执行它;它已经完成,现在想通过直接在我的文件中的.NET代码上调用.NET vm来摆脱temp文件夹(通过给出找到的结构/会话的偏移量,或者只是通过分配正确的PE .section名称 - 知道刚才关于PortableExecutable格式的一点点。)

参考:http://webcache.googleusercontent.com/search?q=cache:u9tTX2sfkhAJ:social.msdn.microsoft.com/Forums/en/clr/thread/2677c0b6-6b3c-4a51-9fcc-c2d8838c7b8b+compiled+IL

4 个答案:

答案 0 :(得分:1)

您可以在C ++应用程序中托管CLR运行时,然后在托管环境中调用方法

杰夫里希特有例子

答案 1 :(得分:1)

您可以使用随Windows SDK提供的COM API在本机进程内托管CLR。 IIS,SQL Server和其他一些产品就是这么做的。实际上,您可以编写自己的ASP.Net替代品,从理论上处理来自IIS的请求。我没有经验可以分享。请查看以下链接:

http://msdn.microsoft.com/en-us/magazine/cc163567.aspx
http://msdn.microsoft.com/en-us/library/9x0wh2z3%28VS.90%29.aspx

答案 2 :(得分:1)

也许您正在寻找一个链接器,它将接受您的.NET库和引用的程序集,并创建一个可运行的可执行文件或.dll,而无需安装.NET。

两种商业选择是

mono也应该可以。它有一个名为 mkbundle 的实用程序,可以预编译和添加依赖项,但是您需要Cygwin以及更多专业知识才能使其工作。这个问题似乎是一个好的开始:How to convert a simple .Net console project a into portable exe with Mono and mkbundle?

答案 3 :(得分:0)

虽然VS没有明确支持这一点,但.Net允许您以与.dll程序集相同的方式引用.exe程序集,并调用公共类。

当然,如果您需要调用的代码是私有代码或内部代码,您可能不得不求助于反射以使其工作。

如果您确实需要将代码移动到.dll中,可以尝试ILMerge创建一个二进制文件。但是,我没有尝试将ILMerge与引用另一个.exe程序集的程序集一起使用。