洪星的博客(原创版,新闻除外)

信息技术 软件开发 电信 移动通信(欢迎和我交流:QQ219402,15152399197)

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  12 随笔 :: 0 文章 :: 62 评论 :: 0 引用

由于 .NET 4.0 使用新版本的 CLR,变化也不少,

例如:

mscoree.dll 变为 mscoree.dll 和 mscoreei.dll,

mscorwks.dll 变为 clr.dll,

mscorjit.dll 变为 clrjit.dll。

这导致在没有安装 .NET 2.0 的情况下,.NET 2.0 程序默认无法在 .NET 4.0 环境下运行(未安装 .NET 2.0/3.0/3.5)。(纠正:不是文件名的变化导致无法运行,而是微软的新策略是强烈建议程序在开发时使用的运行时版本下运行,这样可以保证最大的兼容性

那么怎么办呢?

Visual Studio 2010 对项目可以设置“目标框架”,在没有安装 .NET 3.5 的情况下可以选择 .NET Framework 4、.NET Framework 4 Client Profile,在改变选择之后,会生成一个配置文件,内容如下:

 

<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

把这个文件名改成你需要运行的程序的配置名,同时把程序与配置文件放到一起,这个时候就可以打开 .NET 2.0 的程序了。

 

以上只是我当时想出此方法的思路,当然你没有必要这样做。

你只要搞一个配置文件或者将以上配置文件内容添加到已有的配置文件中。

 

supportedRuntime version="v4.0" 强制当前程序在 CLR 4.0 环境下运行,当然你可以设置 1.0、1.1、2.0,前提是运行环境内有对于版本的运行时。(第二次纠正:如果强制在 CLR 2.0 下运行,必须设置 supportedRuntime version="v2.0.50727",如果设置 v2.0 无效。)

 

顺便说明目前的运行时版本只有 1.0、1.1、2.0、4.0,没有3.0、3.5。

 

实际上仅对 Windows XP 需要这样做,因为 XP 默认情况下没有安装任何 .NET 版本,Windows Vista/7 默认情况下分别安装了 .NET 3.0、.NET 3.5,具有 CLR 2.0。

以上做法可能会有兼容性问题,大型复杂程序不推荐这样做。小工具或者自行编写的程序(例如我)可以这样做,出了问题自行解决。这样在 XP 下,就不用安装 N 个 .NET 版本

本文没有说明的内容,可以自行摸索。

我的博客:http://www.cnblogs.com/hongcing
我的签名:
posted on 2010-02-10 00:09 洪星 阅读(3978) 评论(5) 编辑 收藏

评论

#1楼 2010-02-10 10:07 徐少侠      
supportedRuntime version
MCTS考试,70-536内容之一

 回复 引用 查看   

#2楼 2010-02-10 12:27 诺贝尔      
我觉得微软的策略,应该向下兼容,这样自己修改多烦
 回复 引用 查看   

#3楼 2010-02-10 12:33 DiryBoy      
@诺贝尔
运行时版本跟BCL版本是不同的...
 回复 引用 查看   

#4楼 2010-02-20 15:50 Arthas-Cui      
@诺贝尔
微软也不想麻烦的。
一般都是有点什么事情给弄得没办法了, 只能那么干。
而我们外人又不知道而已。

每个公司应该都有类似的为难之处吧。
至少以前我们做产品的时候就遇到过。
 回复 引用 查看   

#5楼 2010-02-20 15:51 Arthas-Cui      
@诺贝尔
比如linq。
所有人看到第一反应就是凭啥我不能先写select?
我写了那么多年的sql了, 你说改就给我改了?
 回复 引用 查看