2013-03-22 51 views
11

经历了各种博客之后,我对“多目标”或并排执行的术语颇感困惑。.NET中的多目标处理

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

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

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

编号:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

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

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

回答

0

这是我的想法。 .NET已经通过多个版本和多个运行时发展。 .NET的新版本可能会或可能不会有新的运行时。

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

因此,任何瞄准1.0的东西都将在1.1上无缝运行,因为您不依赖那些修复的bug。

.NET 2.0是一个全新的运行时版本。 现在你的电脑可以同时安装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上遇到问题。

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

HTH

0
  1. 并排侧执行装置在一个过程中的多个的CLR。因为CLR是相同的,所以.NET2.5和.NET3.5并不是并排的。然而,.NET2和.NET4是。
  2. 你是什么意思“在.NET4.5中构建并部署在.NET4.0中”?
  3. 你要求明确的技术区分是由微软营销决定的。
+0

Tormod,DLL Hell问题解决的含义是什么?并行执行评估?我可以定位一个3.5或3.0或2.0框架程序集。汇编版本是戴尔地狱的解决方案?为什么所有这些术语都不清楚?我很好奇,究竟是什么意思是通过并行执行来实现,无论CLR如你所说,还是在许多博客甚至是MSDN中所说的程序集。 – Learner 2013-03-22 12:00:46

+0

多重定位只意味着编译一个特定的版本。与Tormod并列说实际上意味着运行时可以将多个版本的.NET加载到内存中并一起执行它们(想想:混合使用4.5 dll的2.0 dll) – Robert 2013-04-07 01:21:44

1

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

  • Multitargettting是你编译应用程序这将 对CLR运行时运行从您正在使用VS2010中,或者.NET 4.5的情况下,开发的应用程序 (.NET 4.0,不同的能力在VS 2012的情况下)。 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运行时安装。
+0

您好codevision,非常感谢您回答我:) 。让我们也邀请其他人以他们的观点来赞美:)干杯 – Learner 2013-03-22 20:19:12

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.x.x/3.5.x.x?

这只是历史的一部分,并且询问为什么没有意义。微软从这些错误中吸取教训,而且.NET Core正在走上正轨。