. net中的多目标

本文关键字:目标 net | 更新日期: 2023-09-27 18:05:12

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

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

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

  3. 我还在Rick/Scott Hanselman的帖子中看到,重大变化意味着,包括CLR在内的完整升级。然后,我应该把3.0看作是主要的升级,但它不是,因为它仍然使用。net 2.0 CLR。那么为什么命名术语是3.0.x.x/3.5.x呢?x ?与。net 4.0.30319中的情况类似。其中CLR也是新的,所以我同意这一点。我很惊讶谁是对的。无论是这些人还是MSDN都违背了他们的原则(比如MSDN说格式为Major.Minor.Build)。修订,Hanselman或其他人说,主要意味着CLR升级,虽然它不在。net 3.0中)

裁判:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

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

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

. net中的多目标

首先你必须了解multitarget和Side-by-side执行之间的区别。

  • 多目标化是你编译应用程序的能力在CLR运行时上运行,该运行时与您用于开发应用程序的运行时不同(.VS2010使用。NET 4.0, VS 2012使用。NET 4.5)。VS中的多目标确保了这一点您的应用程序不会使用CLR运行时中引入的任何类型或方法基类库(BCL)中的版本比您所针对的版本更新。VS这样做是通过在每个运行时中使用的DLL的副本,可以瞄准。
  • 并行执行意味着您可以安装多个CLR运行时版本电脑。从CLR 4.0开始不再正确。您现在可以在同一进程中加载clr4旧的运行时(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上还没有修复这个bug。你会有运行时错误,你可以观察到的方式,这取决于你到达的错误的类型。这可能是安全问题、应用程序中的逻辑错误或运行时异常。如果你想抓住这些问题你可以在只安装。net 4.0的干净PC上进行测试。
  3. 您提供的两个链接不会以任何方式相互干扰。斯科特和MSDN都是正确的说明。net的哪个版本安装了哪个版本的CLR运行时。

我是这么想的

。NET已经发展了多个版本和多个运行时。新版本的。net可能有也可能没有新的运行时。

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

所以,任何针对1.0的东西,都可以无缝地运行在1.1上,只要你不依赖于那些修复的错误。

。. NET 2.0是一个带有全新运行时的新版本。现在你的电脑可以同时安装1.1和2.0了。和1.1版本的应用程序将使用。net 1.1运行时,而2.0版本的应用程序将使用。net 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版本中存在的bug,那么在4.5版本中也会出现问题。

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

HTH

  1. 并排执行意味着多个CLR在一个进程中。。net 2和。net 3.5并不是并排的,因为CLR是相同的。。net 2和。net 4是。
  2. 你说的"在。net4.5中构建,在。net4.0中部署"是什么意思?
  3. 你要求一个明确的技术区分,这是由微软营销决定的。

一些博客说,并行执行意味着两个版本的clr在一个过程中。另一些人则声称,它就像。net 2.0和。net 3.0程序集并行执行。我对此感到非常失望不知道谁对谁错。

. net Framework 2.0和3.0程序集并不是"并排"执行的。正如许多人所说,并行执行只有在运行CLR 1.x/2.0/4.0混合版本时才有意义。

MS在vs的开发中允许这种类型的灵活性有什么用吗?

如果Windows/。如果你在原始。NET Framework 4.0上运行。NET Framework 4.5应用程序,NET会报告任何不兼容性。然而,这将是一个太大的努力来实现,因为修补广泛发布的。net Framework 4.0几乎是不可能的。

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

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

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