什么是C#中的托管/非托管代码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

在我的C#代码中获得应用程序的版本。它运行良好,但当我在NUnit中尝试它时,它会返回.在MSDN中,它声明它可以返回从非托管代码调用时。

提问于
用户回答回答于

一些库代码需要调用非托管代码(例如,本机代码API,如Win 32)。因为这意味着在托管代码的安全范围之外,需要适当的谨慎。

以下是关于托管代码的其他一些免费说明:

  • 由CLR执行的代码。
  • 对象的基础--公共语言运行库的代码。NET框架,称为托管代码。
  • 托管代码提供了CLR提供诸如内存管理、跨语言集成、代码访问安全性和对象的自动生存期控制等服务所必需的元数据。所有基于IL的代码都以托管代码的形式执行。
  • 在CLI执行环境下执行的代码。

对于你的问题:

我认为这是因为NUnit为UnitTest执行代码,其中可能有一些是非托管的。但我不确定,所以不要把这个当成金子。我相信会有人给你更多的信息。

用户回答回答于

托管代码不是编译成机器代码,而是编译到中间语言,中间语言由机器上的某个服务解释和执行,安全框架内操作,该框架为处理内存和线程等危险的事情。在现代用法中,这常常意味着。NET,但不需要。

非托管代码编译成机器代码,因此由作系统直接执行。因此,它有能力执行托管代码所不能做的破坏性/强大的事情。这是一切过去的工作方式,所以通常都是与老东西相关的,比如。dlls

土生土长代码通常是非托管代码的同义词,但并不相同。

扫码关注云+社区