11

浏览了各种博客后,我对“多目标”或并行执行的术语感到非常困惑。

  1. 一些博客说,并行执行意味着一个进程中有两个版本的 CLR。其他一些人声称,它就像 .net 2.0 和 .net 3.0 程序集并排执行。我非常失望,我不确定谁对谁错。

  2. 我还在许多博客中看到,比如 Scott Hanselman 的博客等(这让我很困惑),如果目标框架是 4.0,.NET 4.5 的任何功能都将不起作用。我可以同意。但是我不能同意或理解这样一个事实,即如果我使用 4.5 构建它并在 4.0 中部署,4.0 的一个功能在 4.5 中已修复,它将隐藏。这里我不理解“隐藏”这个词,也没有人敢解释它的真正含义。这意味着运行时错误?这意味着编译时错误?不可能是这个。这意味着不一致的行为?例外 ?如果是这样,我想知道为什么 MS 让这种类型的灵活性在 VS 中进行开发。它有什么用途吗?我明白,第一种情况是有意义的,但不理解或不同意第二种情况。

  3. 我还在 Rick/Scott Hanselman 的帖子中看到,重大更改意味着,包括 CLR 在内的完整升级。然后,我应该将 3.0 视为主要升级,但不是因为它仍然使用 .NET 2.0 CLR。那为什么命名术语是 3.0.xx/3.5.xx ?就像 .NET 4.0.30319.x 中的情况一样,其中 CLR 也是新的,所以我同意这一点。我很惊讶谁是正确的。这些人或 MSDN 都违背了他们的原则(就像 MSDN 说格式为 Major.Minor.Build.Revision,而 Hanselman 或其他人说,Major 意味着 CLR 升级,而它不在 .NET 3.0 中)

参考:http ://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

对以上两个问题有什么想法吗?

4

4 回答 4

1

首先,您必须了解多目标和并行执行之间的区别。

  • Multitargettting是您编译将在 CLR 运行时上运行的应用程序的能力,这些应用程序与您用于开发应用程序的应用程序不同(在 VS2010 的情况下为 .NET 4.0,在 VS 2012 的情况下为 .NET 4.5)。VS 中的多目标确保您的应用程序不会使用 CLR 运行时和基类库 (BCL) 中引入的任何类型或方法,这些版本比您的目标版本更新。VS 通过拥有在每个运行时中使用的 DLL 的副本来做到这一点,这些运行时可以作为目标。
  • 并行执行意味着您可以在 PC 上安装多个版本的 CLR 运行时。从 CLR 4.0 开始不再正确。您现在可以将 CLR 4 与旧运行时(CLR 1.1 或 CLR 2.0)一起加载到同一进程中。请阅读http://msdn.microsoft.com/en-us/magazine/ee819091.aspx (“行为概述”部分)了解更多详细信息。

关于你的问题:

  1. 请阅读上述 MSDN 文章中的链接。
  2. 隐藏术语意味着当您在 .NET 4.5 下调试应用程序时,您会拥有带有错误修复的 BCL 版本,这些错误修复可能会在您部署到 .NET 4.0 后对您造成影响,因为该错误尚未在该版本的 BCL 上修复。您将遇到运行时错误,您可以观察到的方式取决于您遇到的错误类型。这可能是安全问题、应用程序中的逻辑错误或运行时异常。如果你想发现这些问题,你总是可以在只安装了 .NET 4.0 的干净 PC 上进行测试。
  3. 您提供的两个链接不会以任何方式相互干扰。Scott 和 MSDN 在解释什么版本的 .NET 安装了哪个版本的 CLR 运行时都是正确的。
于 2013-03-22T17:13:41.323 回答
0

这就是我的想法。

.NET 经历了多个版本和多个运行时的演变。新版本的 .NET 可能有也可能没有新的运行时。

.NET 1.0 附带运行时。.NET 1.1 是对现有系统的一系列修复和添加。这是一个增量升级。

因此,任何以 1.0 为目标的东西都将在 1.1 上无缝运行,因为您不依赖那些已修复的错误 .etc。

.NET 2.0 是具有全新运行时的新版本。现在您的 PC 可以同时安装 1.1 和 2.0.. 并且 1.1 应用程序将使用 .NET 1.1 运行时,而 2.0 目标应用程序将使用 2.0 运行时..

3.0 和 3.5 版本让事情变得有点复杂。它们可能包含一些修复(我认为),但主要是它们向库中添加了一堆类,并且仍然使用相同的 2.0 运行时。

现在,面向 3.5 的应用程序仍将使用 .NET 2.0 运行时,并且可以正常工作。他们不知道 3.5 中添加的新类(例如:LINQ),也不必知道。

.NET 4.0 又是一个全新的运行时。它可以与 2.0 和 3.5 并排安装。面向 .NET 2.0 的应用程序仍将需要并在 .NET 2.0 运行时上运行,而为 NET 4.0 编译的新应用程序将使用新的运行时。在 .NET 4.0 中,对程序集的定位和加载方式进行了一些更改,因此如果您只是将 2.0 应用程序编译为与 4.0 一起使用,它可能会遇到一些问题。但是一旦你解决了这些问题(如果有的话)它就会起作用

现在...... .NET 4.5 又是一个稍微不同的故事。这是一个新的运行时(AFAIK),但它正在取代 4.0。您不能同时运行 4.0 和 4.5。现在 4.0 目标应用程序将在 4.5 运行时上运行......应用了一些修复程序。因此,如果您的应用程序依赖于 4.0 中可用的那些错误,那么它将在 4.5 中出现问题。

这是一个快速而肮脏的答案。如果您发现任何问题/不匹配/可能的改进,请随时编辑。

高温高压

于 2013-03-22T11:40:32.040 回答
0
  1. 并行执行意味着在一个进程中有多个 CLR。.NET2 与 .NET3.5 不是并排的,因为 CLR 是相同的。但是,.NET2 和 .NET4 是。
  2. “在 .NET4.5 中构建并在 .NET4.0 中部署”是什么意思?
  3. 您要求对由 Microsoft 营销决定的事物进行明确的技术区分。
于 2013-03-22T11:50:09.110 回答
0

一些博客说,并行执行意味着一个进程中有两个版本的 CLR。其他一些人声称,它就像 .net 2.0 和 .net 3.0 程序集并排执行。我非常失望,我不确定谁对谁错。

“其他一些人”只是在误导自己。.NET Framework 2.0 和 3.0 程序集不是“并排”执行的。就像许多其他人所说的那样,只有在混合运行 CLR 1.x/2.0/4.0 时,并行执行才有意义。

MS 已经让这种类型的灵活性在 VS 中进行开发。它有什么用途吗?

如果您在原始 .NET Framework 4.0 上运行 .NET Framework 4.5 应用程序,如果 Windows/.NET 报告任何不兼容性,这将是有益的。但是,要实现这一点需要付出太多努力,因为修补广泛发布的 .NET Framework 4.0 几乎是不可能的。

在这种情况下,微软希望开发人员自己聪明。当他们观察到不兼容时(无论是运行时异常/编译时错误还是其他),他们应该检查是什么原因并解决它。

那为什么命名术语是 3.0.xx/3.5.xx ?

这只是历史的一部分,问为什么毫无意义。微软从这些错误中吸取了教训,.NET Core 走上了正轨。

于 2017-09-08T16:55:07.693 回答