我已经很久以来C#和.Net开发人员,一直在玩c的想法.
我一直在考虑的一个主要原因是,C可以超过使用.Net框架的应用程序.但是,如果我在Visual Studio中编写一个C应用程序,和/或在C应用程序中引用.Net库,那么C是在MSIL中转换的(就像C#)一样,我是否正确地假设,我会放弃任何好处从编码呢?
所以我的问题是这样的:应用程序的C组件是否以“传统”的方式编译.Net程序集,或者被编入MSIL?
解决方法
那比这更复杂一些.
实际上有两个完全不同版本的.NET支持C.
实际上有两个完全不同版本的.NET支持C.
旧的,C的托管扩展是Visual C 2002/2003中唯一可用的选项.它可用于较新的编译器,选项为/ clr:oldSyntax.它有点笨拙,因为它很难与标准C集成,所以所有新的关键字(还有很多)都带有双重下划线等.这个编译器生成的代码是本机和MSIL代码的混合,被称为IJW“只是工作“.
新的C/C++LI,是Visual C 2005和更新的一种干净的新语言.最重要的是,它支持几种代码生成模式.
/ clr选项再次生成本机和MSIL代码的IJW混合.
/ clr:纯管理集合中的纯粹结果,尽管它可能将本机类型转换为相应的.net结构.因此,代码可能不是类型安全的,可以使用指针算术,很像C#with / unsafe.
最严格的选项是/ clr:safe,它产生类型安全,可验证的仅限MSIL的程序集,就像C#编译器一样(没有/不安全的).
有关MC和C/C++LI的区别,请参见wikipedia.
有关编译器开关的说明,请参见MSDN.
PS. .NET字节代码称为MSIL(Microsoft Intermediate Language)或CIL(Common Intermediate Language). MIL可以支持媒体集成层,即WPF和Vista Desktop Window Manager使用的未记录的低级库.