据我所知,任何.NET程序都被编译成MSIL,它被送到CLR,后者将它编译成汇编代码,并在JIT的帮助下执行它。
我很想知道,因为.NET是win32 api的包装器,CLR最终将MSIL转换为汇编程序。我不是可以在C#中编写一些功能,制作一个dll,然后我使用一个工具,使它成为一个完整的.net独立文件,供我在非托管代码中使用,如C或C ++。
我在谈论Interops和COM吗?这个想法不同于它吗?我的目标是在没有.NET框架的机器上运行.NET dll。
答案 0 :(得分:1)
您可以使用Native Image Generator (Ngen.exe)将MSIL DLL编译为本机代码DLL,但这不允许您在没有.NET Framework的系统上运行它。您仍然会引用框架的其他DLL,即使您包含这些DLL,它也不适用于没有.NET框架的系统,因为该框架不仅仅是DLL的集合。
答案 1 :(得分:1)
This KB article解释了一种从本机代码调用托管方法的方法。但是,您仍然需要.NET框架。
答案 2 :(得分:1)
This project将允许您使用静态方法进行非托管导出.NET。
答案 3 :(得分:0)
它不是受支持的方式,许多功能(如Reflection)依赖于比原始机器代码更高级别提供的元数据。有些程序(称为.NET链接器)可能会有所帮助,但它们并非100%可靠。
答案 4 :(得分:0)
如果您在网上浏览,我认为有许多工具可以“编译”.NET程序集/代码以消除对框架的需求。不确定他们的工作情况......