Lea*_*ner 11 .net c# .net-4.0 multitargeting visual-studio-2012
通过各种博客后,我对"多目标"或并列执行的术语感到很困惑.
一些博客说,并行执行意味着一个进程中有两个版本的CLR.其他一些人声称,它就像.net 2.0和.net 3.0程序集并行执行.我非常失望,我不确定谁是对的谁是错的.
我也在许多博客中看到过像Scott Hanselman的博客等(这让人很困惑),如果目标框架是4.0,.NET 4.5的任何功能都将无效.我同意.但是我不能同意或理解这样一个事实:如果我使用4.5构建它并在4.0中部署,那么4.0中修复了其bug的功能将被隐藏.在这里,我不理解"隐藏"一词,没有人敢解释它究竟意味着什么.这意味着运行时错误?这意味着编译时错误?它不能这样.这意味着行为不一致?例外?如果是这种情况,我想知道为什么MS在VS中开发这种类型的灵活性.它是否符合任何目的?我理解,第一个案例是有意义的,但不理解或同意第二个案例.
我还在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
对上述两个问题的想法?
这是我的想法。
.NET 经历了多个版本和多个运行时的演变。新版本的 .NET 可能有也可能没有新的运行时。
.NET 1.0 附带运行时。.NET 1.1 是对现有系统的一系列修复和补充。这是一个增量升级。
因此,任何针对 1.0 的内容都将在 1.1 上无缝运行,只要您不依赖那些已修复的错误等。
.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 又是一个略有不同的故事。这是一个新的运行时(据我所知),但它正在取代 4.0 的运行时。您不能同时运行 4.0 和 4.5。现在 4.0 目标应用程序将在 4.5 运行时上运行...应用了一些修复。因此,如果您的应用程序依赖于 4.0 中的这些错误,那么它在 4.5 上也会出现问题。
这是一个快速而肮脏的答案。如果您发现任何问题/不匹配/可能的改进,请随时编辑。
华泰