1

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

新问题:

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

我不想将一些 .NET .exe 写入临时目录并执行它;它已经完成,现在想通过在我的文件中的 .NET 代码上直接调用 .NET vm 来删除临时文件夹(通过给出找到的结构/会话的偏移量,或者只是通过分配正确的 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

4 回答 4

1

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

杰夫里希特有例子

于 2010-10-05T23:21:55.557 回答
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

于 2010-10-07T05:07:49.930 回答
1

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

两种商业选择是

  • Salamander .NET 链接器http ://www.remotesoft.com/linker/ 。它非常昂贵,但确实如此。
  • Xenocodehttp ://www.xenocode.com/ 。

mono也应该可以。它有一个名为mkbundle的实用程序,它可以预编译和添加依赖项,但你需要 Cygwin 和更多的专业知识才能让它工作。这个问题似乎是一个好的开始:如何使用 Mono 和 mkbundle 将简单的 .Net 控制台项目 a 转换为可移植的 exe?.

于 2010-10-10T14:39:17.320 回答
0

虽然 VS 不明确支持这一点,但 .Net 允许您像引用 .dll 程序集一样引用 .exe 程序集,并调用公共类。

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

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

于 2010-09-07T18:01:59.267 回答