【问题标题】:What is .NET's relation to the Windows Kernel/OS & other OS's.NET 与 Windows 内核/操作系统和其他操作系统的关系是什么
【发布时间】:2011-11-17 17:49:35
【问题描述】:

我对 .NET 究竟是什么感到困惑。我是一名计算机科学专业的学生,​​使用 C++ 完成了大量 Win32 (WinAPI) 编程,并且非常了解 Win32 函数如何与 COM 和 Windows 内核本身交互。

但是 .NET 在哪里适合这一切呢?

  • 具体来说,如果 Win32 是用 C 编写的 API,那么 .NET 是什么?它也是用 C 编写的 API 吗?是否只能在 Win32 等 Windows 操作系统上运行?

  • .NET 是否在 Win32 API 之上运行?例如,一个 .NET 函数 showWindow()(显然是我编造的)在幕后调用 Win32 函数来显示窗口,还是直接进入内核执行此操作?还是 .NET 就像 Java 虚拟机?

  • .NET 是否直接与 Windows 内核交互(如 Win32)并与 COM 对象交互? .NET 是否在沙盒中运行并且不允许对某些操作系统区域进行某些访问?

  • 我可以使用 Win32 API 以不同的语言编写代码,例如 c/c++、VB、Perl。我可以在 .NET 中编写哪些语言?

  • 这才是真正让我难过的地方。我听说过用 .NET 编写的 Web 应用程序?什么,怎么,什么?它是用什么语言写的? .NET 是否在 IE 之上运行? .NET Web 应用程序可以在 Firefox 或 Safari(MacOS) 上运行吗?是像 java 小程序一样的 .NET Web 应用程序,您是否也获得了 .NET 驱动程序。

【问题讨论】:

  • 值得先搜索一下,这里是一个很好的起点:en.wikipedia.org/wiki/.NET_Framework
  • 什么是框架...,总之.Net就像Java虚拟机
  • @Jodrell 不,Net Framework 就像 Java 平台。 .NET 运行时类似于 JVM,.NET 库类似于 Java 类库。
  • @xanatos,好的,你找到我了。我的评论不合时宜,但仍然很短。

标签: c# .net c++ winapi


【解决方案1】:

.NET 有几个部分。

  • 运行时。这是用 C (AFAIK) 编写的 - 它是运行 .NET 应用程序的基础。有一个垃圾收集器。这就是与 Windows 内核交互的内容。
  • BCL(基类库)这是一组 .NET 库。其中一些是 COM 的包装器。早期版本的 COM 包装器比较新的版本多。
  • CL/IL(通用语言/中间语言)。这是一种低级语言(类似于 Java 字节码)。大多数 .NET 语言都编译为此,这就是运行时执行的内容。

Microsoft 已将 .NET 的部分内容纳入标准 - 其中部分内容已通过 Mono 项目在 Linux 上实现。

您可以使用 .NET 使用 pInvoke(平台调用)与 COM 交互。在这方面,它不是沙盒。这意味着您可以使用 .NET 调用任何 PE 样式的可执行文件。当然,有无数种语言可以编译成 IL(称为 .NET 语言)——最著名的是 C#、VB.NET 和 F#,但也有 python(Iron Pyton)、COBOL 等的实现。

至于 Web 应用程序 - 有几个 Web 框架(ASP.NET 和 ASP.NET\MVC 是 Microsoft 创建的)在 IIS Web 服务器上运行。 .NET 不运行 in 浏览器,不是本机的,但服务器会生成浏览器使用的 HTML。与所有其他 Web 应用程序一样,如果以这种方式开发,它们可以在所有浏览器上运行。

您可以使用插件在浏览器中使用 .NET(Silverlight 和 MoonLight 是最著名的)。

【讨论】:

  • @Marc - 我的意思是原生。补充说这需要一个插件。
【解决方案2】:
  • .NET 是 CLI VM 的 MS 品牌;有用于其他平台的 CLI VM;主要是“单声道”;然而,即使 .NET 也比 win32 更广泛,因为 .NET 的版本适用于 XNA (xbox 360)、移动设备 (CF),甚至更小的设备 (MF)、浏览器 (SL) 和手机(WP7 等)。 .NET 有时也被用作 的名称,并且大部分 是用C# 编写的。在 Windows 8 中还有 WinRT,这让事情变得更加混乱。
  • (也见上文)两者兼而有之;它具有互操作 (P/Invoke) 以在需要操作系统功能时使用,但也可以自我支持。
  • 它通常是一个虚拟机,所以是的,它是一个沙盒;请注意,存在一些用于直接编译为本机代码的编译器(单 AOT),例如用于 iOS 设备的 ARM(参见:MonoTouch)
  • CLI 编译器编译为 IL;有许多 CLI 编译器(和运行时,用于动态语言)。 IL通常根据需要对本机代码进行 JIT,但可以提前完成 (NGEN),或者根本不完成(MF 是一种 IL 解释器)
  • 那里的“网络应用程序”可能指的是服务器部分;这个站点有一个 C#/.NET 服务器实现。还有用于浏览器内客户端体验的 Silverlight 和 XBAP。 Silverlight 可以在多种浏览器上运行,moonlight(单声道版本,适用于非 Windows 平台)也是如此。

【讨论】:

  • +1 我想补充一点,虽然您可以用 C# 编写一个完整的自托管 Web 服务器,但“通常”您使用 IIS,并且两者之间存在特殊关系IIS 和 ASP.NET。
【解决方案3】:

一些简短的答案让你继续前进:

具体来说,如果 Win32 是用 C 编写的 API,那么 .NET 是什么?它也是用 C 编写的 API 吗?

.NET 由多个部分组成。一部分称为 CLR。该部分是用 C++、C++/CLI 和一些程序集编写的。这负责运行 .NET 应用程序。即时 (JIT) 编译器是其中的重要组成部分。

然后是包含的库。这些主要是用 C# 编写的,但其中一些可能有部分是用 C++/CLI 编写的。您实际上可以获得许多包含库的源代码。

它只能在像 win32 这样的 Windows 操作系统上运行吗?

也没有,有一个在 Linux 上运行的端口(称为 Mono),有在 WIndows Phone 7 上运行的版本,然后是在 Mac 上也运行的 Silverlight....

.NET 是否在 win32 API 之上运行?

在很大程度上,是的,尽管在某些地方它开始取代常规的 WinAPI(这肯定是微软在某个阶段尝试对大部分或全部 WinAPI 进行 .Net 化的计划)。不过我不会用它编写驱动程序,你仍然会使用常规的 C/C++ 接口来连接内核 API。

这些库确实调用了 win32 API 的许多不同部分。这是与其他 Windows 应用程序顺利互操作所必需的。

.NET 是否与... COM 对象交互?

是的,使用 COM 互操作。

.NET 是否在沙箱中运行并且不允许访问某些操作系统区域?

运行时的某些变体可以被沙盒化(Silverlight、WPF XBAP)。拥有UnmanagedCode 权限的 .Net 应用程序还可以调用用非托管 C++ 编写的代码,并且可以完全不受限制地访问系统(尽管您仍然必须遵守文件 ACL 之类的小麻烦)。

我可以使用 c/c++、VB、Perl 等 win32 API 以不同的语言编写代码。我可以在 .NET 中编写哪些语言?

.Net 是一个带有 JIT 编译的运行时库。您可以使用许多构建在框架之上的语言。 JIT 编译也不是强制性的 - 您仍然可以编译您的应用程序以针对特定的 CPU 架构。

我听说过用 .NET 编写的 Web 应用程序?什么,怎么,什么?它是用什么语言写的? .NET 是否在 IE 之上运行? .NET webapps 可以在 Firefox 或 Safari(MacOS) 上运行吗?

这些应用程序可以用任何 .Net 语言编写,尽管实际上大多数应用程序将使用 C# 和 VB.Net。你一定听说过 ASP 吧?嗯,ASP.NET(及其姊妹 ASP.NET MVC)是下一代——它在服务器上运行,并像许多其他服务器端语言一样呈现 HTML + javascript。您还可以选择在客户端上运行 Silverlight,它可以在浏览器内外运行。 Silverlight 绝对适用于 Firefox、Safari 和 Chrome。

【讨论】:

  • 我制作了这个 CW,以便人们可以根据需要对其进行扩展。
  • 我认为并非所有框架都是用 .NET 编写的。有很多外部功能。例如 Monitor.Enter/Monitor.Exit,许多字符串函数……我认为 Mono 甚至可以在 Mac 上工作。您可以从 C# 中 PInvoke。 MVC真的是女性吗?我要补充一点,.NET 4.0 支持动态语言(例如带有 IronPython 的 Python)。我会使用 C 来写入内核 API :-)
  • @xanatos,我的答案是社区 wiki,所以请随意加入并添加。如果我们可以开始为某些答案添加一些对外部资源的引用,尤其是不同语言的框架源文件之类的东西,那就太好了。
【解决方案4】:

.NET Framework 包含一个运行时引擎(JIT/Native Compiler),并拥有大量主要用 C# 编写的库。

这允许使用公共语言基础结构(CLI 是一种开放规范)开发的语言位于框架上,因为每种语言的编译器将代码编译为 .NET 运行时引擎执行的 MSIL(Microsoft 中间语言)。

目前,Novel 正在开发 Mono,它是一个用于 .NET CLI 语言的跨平台运行时引擎,但同样处于早期阶段,大部分 .NET 3.5 规范已经实现。

就“网络应用程序”而言,在 ASP.NET 中开发的应用程序都是服务器端的,并向浏览器返回 HTML 和 javascript,以尝试模拟一些 WinForm 样式的操作。

但 Silverlight 是一个适用于非 IE 浏览器的浏览器插件,它包含 .NET 运行时引擎和库的精简版本,进而在本地计算机上执行以 .NET CLI 语言编写的应用程序。

【讨论】:

    【解决方案5】:

    您可以简单地将其视为 win32 API 的“实际上就是这样!”的包装器。 它也是一个完整的框架,将程序员与旧 API 及其问题分开

    它具有类似 java 的运行时,并且能够在多个平台上工作

    当然,如果它在 Windows API 之上运行,那么所有这些

    这里有一篇关于 dot net 的简单文章 http://www.codeproject.com/KB/dotnet/allaboutnet.aspx

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2011-03-19
      • 2016-10-21
      • 2011-04-06
      • 2013-08-29
      相关资源
      最近更新 更多