FrameWork4.0的兼容问题 net framework 兼容性
我们知道 .NET Framework 3.0 是包含 2.0 的,而 3.5 是包含 3.0,也就是说:我们安装了 .NET Framework 3.0 后,就不用安装 2.0 了;安装了 3.5 之后就不用安装 2.0 和 3.0 了。
那 4.0 包括 2.0 吗?也就是说安了 4.0 之后还需要安装 2.0 或 3.0 或 3.5 吗?
.NET Framework 4.0 是不包含 2.0、3.0、3.5 的,也就是说如果仅安了 4.0,那么要运行 2.0、3.0、3.5 的程序时是会出错的。
所以,目前来说,我们一般把 3.5 和 4.0 都安上。
但是要2.0的程序在4.0上运行,只安装还不行,在 4.0 版本中,compilation 必须包含 targetFrameworkMoniker 属性,所以我们应该重新配置下 web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0" />
</system.web>
</configuration>
这样这个 2.0 的 ASP.NET 程序在 4.0 中运行了
.Net FrameWork 4.0 兼容早期版本的测试
看到文档说.net4的框架可以向下兼容2.0、3.0、3.5这几个版本,觉得是一件好事,以后服务器上就不用费时费力的安装 2.0、3.5之类的框架了。但是又觉得奇怪,2.0和3.5的框架都是很大的,为什么现在这个小得多的4.0能同时运行 前几个版本的程序呢?是不是因为 win7上自带了3.5? 那win2003上会怎么样呢?
为了搞清楚这个问题,我重新装了一台全新的 win2003 ,系统装好后,添加 IIS。并打上SP2的补丁(必须的)。这时的系统基本上算是裸机,系统的.Net版本是1.1。
然后开始安装.Net4.0的框架,安装完后,在IIS里建立两个网站,一个是用 vs2010创建的默认 Asp.Net WebApplication 使用的框架版本为4.0,为了撤底不沾 4.0的边,另一个是用vs2008 创建了的 asp.net Web 站点, 并在其中写了Linq 语法的语句(查询当前目录中的文件并显示)。 部署这两个网站后,在属性对话框的asp.net 属性页中设置用户的框架版本为 asp.net4.0 , 这时会弹出一个对话框,大致是说改变了.NetFrameWork的版本后会重启 W3SVC服务,(因为这个版本不再是运行在w3wp.exe中),点确定即可,完成后,在浏览器上访问,可正常运行。
结论:.Net FrameWork 4.0 能很好的运行之前版本的.Net 网站(其他类型的应用应该也没问题),所以如果您是现在重装了服务器的系统,正要配置运行环境,那我建议你,直接只装一个.Net 4.0的框架就行了,其他的全不用装,既快又省。既能保证现有应用的正常运行,又能让你有新的开发环境去学习和测试新的技术。
题外话:我准备这样:在 win2003的服务器跑 .Net4.0一个框架就够了,然后开发使用 VS2010 做开发工具,新的开发应用定位为 3.5 的框架版本,原2.0和3.5的应用还是不变,等 4.0 正式后再考虑升级 。其实不升也无所谓,运行环境统一了,开发工具统一了,用什么版本就只是选择一下就行了:)。果然很爽。
本文来源于王者永乐 http://www.wzyl.tk , 原文地址: http://www.wzyl.tk/?p=558
【.NET Framework 4 官方说明】
应用程序兼容性和部署
.NET Framework 4 与使用 .NET Framework 早期版本生成的应用程序有很高的兼容性,除了提高安全性、标准遵从性、正确性、可靠性和性能所做的一些更改之外。
.NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序。 若要使用 .NET Framework 4 运行较早的应用程序,则必须使用 Visual Studio 中项目的属性指定的目标 .NET Framework 版本编译应用程序, 或使用应用程序配置文件中的 <supportedRuntime> 元素 可指定所支持的运行时。
如果安装 .NET Framework 4 后,您的应用程序或组件无法运行,请在 Microsoft Connect 网站上提交 bug。 您可以按照 .NET Framework 4 Application Compatibility(.NET Framework 4 应用程序兼容性)主题中的描述测试兼容性,并通过 Visual Studio 2010 and .NET Framework 4 Walkthroughs(Visual Studio 2010 和 .NET Framework 4 演练)来了解新增功能。
有关迁移到 .NET Framework 4 的指南,请参见 .NET Framework 4 的迁移指南和 .NET Framework 的版本兼容性。
以下各节介绍了部署改进。
Client Profile
.NET Framework 4 Client Profile 比以前的版本支持更多平台,并可提供应用程序的快速部署体验。 默认情况下,一些新增的项目模板现在以 .NET Framework 4 Client Profile 为目标。 有关更多信息,请参见 .NET Framework Client Profile。
进程内并行执行
此功能使应用程序能够在同一个进程中加载和启动多个版本的 .NET Framework。 例如,您可以运行在同一进程中加载基于 .NET Framework 2.0 SP1 的外接程序(或组件)和基于 .NET Framework 4 的外接程序的应用程序。 较旧组件可继续使用 .NET Framework 的较旧版本,新组件则使用 .NET Framework 的新版本。 有关更多信息,请参见进程内并行执行。
可移植类库
安装 Visual Studio 2010 Service Pack 1 (SP1) 和 Portable Library Tools 后,您可创建不必重新编译即可在各种 .NET Framework 平台上运行的可移植类库。 有关更多信息,请参见可移植类库。
.NET Framework兼容问题(zz)
NET对版本兼容性的严格要求就会产生一个有趣的问题:如果一个应用程序是根据.NET的版本n创建的,那么该应用程序就不能用.NET的n+1版本(在它发布时)。因为应用程序的manifest包含所有程序集的版本号,包括Common LanguageRuntime(CLR)和应用程序架构。.NET程序集是强命名的,所以程序集分解器(resolver)(负责查找和加载兼容的程序集的.NET实体)就坚持版本的完全匹配。为了克服与它自己的程序集的版本兼容性问题,.NET提供了一套与用于其它程序集的原则不同的基本原则。所包含的问题很复杂。一个类库中的组件或一个EXE运用的CLR实际版本可以是不同的,取决于它们是用什么编译的、可用的.NET版本和应用程序版本策略。
虽然CLR和各种.NET应用程序架构包含许多程序集,但我们把它们都看成是一个单独的版本单元(versioningunit)。这些单元的多个版本可以在任何一台特定的机器上并存。这就称为CLR同时运行(side-by-side execution)。
同时运行是可能的,因为.NET是在GAC中部署的,而且GAC支持同一个程序集的不同版本的同时并存。因为CLR同时运行的特点,所以不同的.NET应用程序就可以同时运用.NET的不同版本。也可以安装.NET的新版本或删除现有的版本。你在安装另一个应用程序时,同时并存就可以减少对现有应用程序的影响,因为旧的应用程序仍可以运用旧的.NET版本(只要你采取我在下面描述的步骤)。但是,当你升级到下个.NET版本时,CLR同时运行就可以让你选择.NET的版本,而不是注定用最新安装的版本来升级。
当你选择运用更新的.NET版本的功能时,你的组件就不再与旧的版本兼容了。因此,你必须在每个.NET版本上测试和证明你的组件,并在产品文件中明确声明所支持的是哪个.NET版本。接下来,你需要了解CLR版本统一(versionunification)这个概念。所有的.NET应用程序都是在加载CLRDLLs的一个非受控过程中创建的。这个未受控过程可以运用CLR程序集的一个版本。不仅如此,当你得到CLR的一个特定的版本时,它也表明运用的是哪个版本的.NET应用程序架构,因为CLR和应用程序架构的程序集都是作为一个单独的版本单元来处理的。.NET总是运行一组统一的架构程序集,这一事实就称为版本统一。
我们需要统一,因为在设计时,我们并没有考虑CLR和.NET应用程序架构的融合,一些程序集来自版本n,一些来自版本n+1。一个.NET应用程序通常包含一个单独的EXE应用程序集,可能还有多个类库程序集。统一就意味着,在一个包含受控的应用程序的过程中,EXE应用程序集和它加载的类库可以运用同一个.NET版本。由EXE来选择所运用的CLR和应用程序架构的版本。类库在这方面没有发言权。例如,第一个.NET版本(.NET1.0)中的所有的程序集都有版本号1.0.3300.0。第二个.NET版本的所有的程序集都有版本号1.1.5000.0。
设想有一个机器,它安装了这两个版本。当一个EXE程序集运用.NET版本1.1.5000.0时,它就会让它加载的所有的类库运用1.1.5000.0,即使它们是用版本1.0.3300.0编译的。如果EXE程序集选择版本1.0.3300.0,那么它加载的所有的类库就用版本1.0.3300.0了,即使它们需要1.1.5500.0的更新的功能。由于统一和同时运行的特点,所以就可以让一个应用程序运用版本1.0.3300.0,同时让另一个应用程序运用1.1.5000.0,即使这两个应用程序是相互作用的。
我们可以在一台特定的机器上实现CLR版本的结合。应用程序可以依赖一个缺省的CLR版本策略,或者它们可以提供明确的配置,表明所支持的CLR版本。
说明所支持的CLR版本
如果应用程序没有向.NET表明它需要的是哪个CLR版本,那么实际上,应用程序就告诉了.NET:任何兼容的CLR版本都可以用。如果是那样的话,.NET就检测应用程序兼容的CLR版本,并在机器上运用最新的兼容的CLR版本。最后,.NET就知道哪个CLR版本可以与其它版本向后兼容。(目前所有新的版本都是向后兼容的)。兼容性列表保存在Registry中。依赖于这个缺省的策略的应用程序一般都是主流应用程序,它们运用所有CLR版本所支持的类型和服务的子集。运用新功能或类型的应用程序不能用缺省的策略,因为安装这个应用程序的机器可能只有旧的CLR版本。同样,如果应用程序运用的功能不再得到支持,它们也不能用缺省的策略。
缺省的版本可以使应用程序在不用检测的CLR版本上运行,结果会产生不确定的行为。如果应用程序不想依赖缺省的版本策略,而想具有确定的行为,那么它可以提供明确的版本配置。在这种情况下,应用程序必须在配置文件中运用startup标签和supportedRuntime属性来表明它支持哪个版本的CLR:<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v1.1.5000.0"/>
<supportedRuntime version="v1.0.3300.0"/>
</startup>
</configuration>
CLR版本排列的顺序表明了优先权。.NET首先尝试给应用程序提供第一个CLR版本。如果机器上没有那个版本,.NET就用列表中的下一个版本,以此类推。如果没有指定的版本可用,.NET就拒绝加载应用程序。.NET会呈现一个信息框,让用户至少安装配置文件中指定的一个支持的版本注意,startup指示符覆盖了.NET可以提供的任何缺省的行为,这就是说,即使机器上有另一个兼容的版本可用(但没有列在配置文件中),.NET仍拒绝运行应用程序。结果就是,当应用程序明确列出所支持的CLR版本时,如果一个机器提供的新版本不在该列表中,应用程序仍不能部署。
一般情况下,你不能不通过一个测试和确认循环过程就添加一个CLR版本到列表中。问题是,只有.NET1.1可以识别SupportedRuntime属性。Microsoft打算为.NET1.0提供一个服务包,使它可以支持这个标签。在这种功能实现前,用.NET 1.1开发的程序在一台.NET1.0的机器上部署时就会有问题,因为不支持SupportedRuntime属性。但是,.NET1.0可以支持startup标签下的requiredRuntime属性:<startup>
<requiredRuntime version="v1.0.3300.0"/>
</startup>
当指定了requiredRuntime属性时,.NET就用指定的CLR版本号,而不用创建EXE的版本号了。如果机器上没有指定的CLR版本号,那么.NET就在Registry中查找最新的、可以兼容的版本并运用它。通过将safemode属性设置为true,你(或系统管理员)甚至可以让.NET不在Registry中查找:
<startup>
<requiredRuntime version="v1.0.3300.0" safemode="true"/>
</startup>
在这种情况下,如果没有所需要的CLR版本,.NET就会显示一个错误信息,并拒绝加载应用程序——即使可以用一个兼容的版本。Safemode的缺省值是false。一旦.NET1.0支持supportedRuntime属性,那么我们就会认为requiredRuntime属性不再被支持而不用它了。
.NET架构师努力要在两者之间寻求平衡:既可以支持创新和开发新的版本,又可以支持现有的应用程序。最终还是由你来决定是否让你的应用程序和组件支持一个特殊的CLR版本。这就体现了开发理念的一个重大的改变——Microsoft不再保证绝对的向后和向前的兼容性了,因为那不切实际。作为替代,它保证使每个更新的.NET版本都是可以向后兼容的,并指出了不兼容点。
————来源 :http://www.cnsw.org/bbs/thread-92826-1-1.html
更多阅读
四快学习法的价格问题
四快学习法的价格问题——简介随着现在的四快学习法的逐渐在我国的各个区域市场的畅销,很多的学生家长都开始积极地关注到这样的热门的教辅材料,因为很多人都想要了解到四快学习法的神奇之处,想要知道为什么简单的教辅方法就能够改
解决源文件名长度大于文件系统支持的长度问题 源文件名大于
解决源文件名长度大于文件系统支持的长度问题——简介因Windows文件夹有长度限制,在路径长度达到32767个字符时,删除文件时就会出现因“该文件夹包名称过长且无法放入回收站的项目”错误,因此可用本经验中方法快速安全删除整个文件夹。
win7环境下红色警戒2的联网问题 红色警戒联网平台
win7环境下红色警戒2的联网问题——简介红警2是个很老的游戏了,与现在的主流win7系统有些冲突。虽然能玩一下单机游戏,但是不能连接局域网。如果你有此类麻烦,来这儿就对了。win7环境下红色警戒2的联网问题——工具/原料
强直性脊柱炎病人中常见的心理问题分析及护理 强直性脊柱炎护理ppt
【摘要】目的分析强直性脊柱炎病患者的心理问题从而进行有针对性的心理护理。方法采用抑郁自评量表(SDS)和焦虑自评量表(SAS)对56例强直性脊柱炎病患者进行心理问卷调查,然后根据患者存在的抑郁、焦虑等情况进行有针对性的心理护理四周
移动硬盘 usb2.0与3.0的区别 usb3.0不兼容2.0硬盘
时间:2011-10-7 17:14:00① USB3.0系列可向下兼容USB2.0,USB1.1,不仅在新型USB3.0接口电脑上轻松遨游,对于USB2.0电脑未升级用户也能使用,大大提升数据储存的便捷性,彻底发挥产品性能;② 在设备支持的情况下,USB3.0的理论速度能达到USB2.0的