我开始深入阅读.NET框架及其公共语言运行时。 我正在阅读微软的.NET概述 ,我不确定这个陈述是什么意思。

以运行时为目标的代码称为托管代码,而不以运行时为目标的代码称为非托管代码。

你如何针对公共语言运行时? 在Visual Studio中进行开发时我知道它是默认的,但是你如何专门针对CLR呢?

开发.NET应用程序时的代码不会以CLR为目标,从而被称为非托管代码

#1楼 票数:4 已采纳

定位运行时意味着为运行时进行编译,也就是输出CIL又称MSIL(而不是x86 / x64 /等机器代码)。

说任何不以运行时为目标的东西都是“非托管代码”,这是一种错误的二分法。 例如,在JVM上运行的代码可以说是可以管理的,但我认为我们可以在这个上下文中将句子称为“由CLR无法管理”。

有可能编写一个C#编译器,它可以吐出本机代码而不是目标运行时(虽然你可能至少需要一些运行时的GC),并且同样可以编写吐出CIL的C编译器。 在这个例子中,假设的C#编译器不是针对运行时,而是假设的C编译器。 这里的重要区别是将语言与目标分开。

没有以运行时为目标的.NET应用程序将是一个矛盾。 如果它没有以运行时为目标,那么它就不是.NET应用程序。

它可以变得更模糊, unsafeP/Invoke 当您使用P/Invoke或COM interop等功能时,您最终会定位运行时以及其他一些内容 这并不意味着您已经停止了对运行时的定位,它只是意味着您在运行时之外还有其他依赖项。 跟踪这类东西是为什么像CLSCompliantAttribute这样的东西存在的原因。

#2楼 票数:2

在.NET框架上运行的所有代码都是托管代码。 非托管代码的一个例子是C ++,它被称为非托管代码或本机代码。

#3楼 票数:2

它是一个模糊术语,它意味着“配置构建工具以生成与托管运行时兼容的二进制映像”。 可以运行托管代码的可执行文件遵循标准PE32文件格式。 熟悉EXE和DLL文件。 这样的二进制映像在.NET中称为“汇编”。 其格式在本Ecma标准文件中有详细记载

常用的大多数构建工具都非常特定于创建托管程序集。 像csc.exe和vbc.exe一样,分别是C#和VB.NET编译器。 某些工具可以生成任何一个工具,必须使用正确的命令行选项运行才能获得所需的最终结果。 与cl.exe和link.exe一样,C / C ++的编译器和链接器,内置支持C ++ / CLI语言。 他们还可以创建包含托管IL和机器代码混合的程序集。

特别是后两个工具并不容易用于定位托管运行时。 IDE的工作和与Visual Studio结合的构建系统使其变得简单。

  ask by contactmatt translate from so

未解决问题?本站智能推荐:

3回复

“CLR”与“.NET运行时”是一回事吗?

在阅读Troelsen的书“Pro C#5.0和.NET 4.5 Framework”时,我遇到了这两个术语。 我或多或少了解公共语言运行时(CLR)是什么,但“.NET运行时”与CLR是一回事吗? 我想是的。
3回复

.net运行时2.0,而不是最新版本?

在我的计算机上,我安装了.NET Framework 2.0,然后安装了.NET Fratmeworkt 3.0。 但是最近我从一个程序中得到了一个异常,说“事件1000,.NET Runtime 2.0错误报告”。 我想知道为什么该程序仍然使用.NET Runtime 2.0而不是新版本。
3回复

通用运行时?

我不清楚的是,我了解C#和VB.NET之间的区别(主要是在指针的使用上),但是为什么如果两者都具有Common CLR,那么XNA(例如)仅适用于C#而不适用于VB .NET,还是Visual Studio的插件是针对C#而不是VB.Net的,实际上语言扩展在两种语言中均有效 抱歉,如果这
3回复

在.NET CLR上下文中,运行时是什么意思?

在.NET公共语言运行时的上下文中, “运行时”是什么意思?
2回复

为什么安装了.NET 4的计算机无法运行针对.NET 4.5的exe,而如果它们使用相同的CLR版本?

在公共语言运行时(CLR) Microsoft页面中,它表示.Net Framework 4和4.5都使用CLR版本4。 但是在此页面( .NET Framework版本和依赖项 )中,它编写了'.Net Framework 4.5版包含了CLR 4的更新版本' 还写道: '
1回复

是否可以动态更改激活旧程序集的CLR运行时(BindAsLegacyV2Runtime)?

这是我的问题: 我必须做一个由第三方应用程序托管的插件。 该应用程序是MFC应用程序,要做我的插件,我必须实现COM对象。 我的COM对象在C#中,并且需要与.NET 4程序集互操作(因此,我的C#项目以.NET 4为目标)。 当我测试它时,它不起作用...我收到了一个例外: 混
2回复

运行.NET可执行文件时会发生什么(逐步到程序加载并运行的程度)?

当您运行.NET可执行文件时,按顺序逐步完成。 我的基本理解是你运行可执行文件,CLR做一些检查,将CIL编译成特定于平台的代码,将其与指定的必需dll一起加载(如清单中所指定)并运行你的程序。 有人可以详细说明这一点,直到“它为这个和那个”级别分配内存? 我真的想知道从双击可执行文件
4回复

如何从 Excel VBA 调用 .NET 方法?

我找到了一种直接从 VBA 代码调用 .NET 2 代码的方法: Dim clr As mscoree.CorRuntimeHost Set clr = New mscoree.CorRuntimeHost clr.Start Dim domain As mscorlib.AppDomain clr