文章目录

  • 一、描述
  • 二、兼容问题
  • 1、高低版本.NET兼容问题
  • 2、windows自带的.NET版本
  • 2、如何查案已安装的.NET版本
  • 2.1、方法一:官方办法
  • 2.2、方法二:通过javascript查看.NET版本
  • 2.3、方法三:通过注册表查看.NET版本
  • 三、高低版本.NET兼容解决办法
  • 四、高低版本.NET兼容测试


一、描述

端游上架QQ游戏大厅,一般会要求自制一个微端下载器,可以使用.NET Framework的桌面应用开发,也可以使用C++桌面应用开发。为了方便快捷,我采取了.NET Framework的桌面应用开发的方式。

二、兼容问题

1、高低版本.NET兼容问题

下载器使用了.NET 4.0版本进行编译,在win10系统中可以正常运行,在win7中运行报错,如下

低版本容器在高版本里打不开 低版本兼容高版本_DNP


于是,将下载器改为.NET 3.0进行编译。可以在win7中正常运行了,但是在win10中出问题了,运行弹出提示框,如下:

低版本容器在高版本里打不开 低版本兼容高版本_.net_02


微软居然不会自动向下兼容。

2、windows自带的.NET版本

操作系统版本

默认安装的.NET版本

windows xp sp1

.NET Framework 1.0 + SP2

windows xp sp2

.NET Framework 1.0 + SP3

windows xp sp3

.NET Framework 1.0 + SP3

windows Vista

.NET Framework 2.0 + 3.0

windows Vista SP1

.NET Framework 2.0 SP1 + 3.0 SP1

windows 7 / windows 7 SP1

.NET Framework 3.5.1

windows 8

.NET Framework 4.5

windows 8 sp1

.NET Framework 4.5.1

windows 10 (1507)

.NET Framework 4.6

windows 10 (1511)

.NET Framework 4.6.1

windows 10 (1607)

.NET Framework 4.6.2

windows 10 (1703)

.NET Framework 4.7

windows 10 (1709)

.NET Framework 4.7.1

windows 10 (1803/1809)

.NET Framework 4.7.2

windows 10 (1903)

.NET Framework 4.8

注意,现在很多操作系统都做了ghost镜像版本,所以系统自带的.NET版本不一定和上面的表格一致,很可能你的win7就自带了.NET 4.0了。

2、如何查案已安装的.NET版本
2.1、方法一:官方办法

微软官方提供了工具,https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

低版本容器在高版本里打不开 低版本兼容高版本_兼容_03

2.2、方法二:通过javascript查看.NET版本

如果你是win7,可以使用更简单的办法:
新建一个html文件,内容如下:

<script>
alert(navigator.userAgent);
</script>

然后使用IE浏览器打开,即可看到已安装的.NET版本了。

低版本容器在高版本里打不开 低版本兼容高版本_DNP_04


如果是win10则不行,看不到.NET版本,弹框如下:

低版本容器在高版本里打不开 低版本兼容高版本_低版本容器在高版本里打不开_05

2.3、方法三:通过注册表查看.NET版本

win+R键,在命令窗口输入regedit.exe,打开注册表。

低版本容器在高版本里打不开 低版本兼容高版本_DNP_06


在注册表中定位到如下节点HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

安装过的.NET Framework都列在NDP目录下

低版本容器在高版本里打不开 低版本兼容高版本_DNP_07

三、高低版本.NET兼容解决办法

查阅了微软的官方文档:
https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-configure-an-app-to-support-net-framework-4-or-4-5 解决办法如下:
载器使用.NET 3.0进行编译。
下载器exe同级目录中放一个与exe同名的.config配置,比如下载器为MyLauncher.exe,则配置名为MyLauncher.exe.config。配置内容如下:

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

四、高低版本.NET兼容测试

使用上述的解决办法,将程序在以下环境中进行兼容测试。
1 在只安装了.NET 3.5win7中进行测试。
2 在只安装了.NET 4.0win10中进行测试。

补充,如果你的电脑中既安装了.NET 3.5又安装了.NET 4.0,可以将.NET 3.5禁用掉。

方法如下:

打开 控制面板\程序\程序和功能,点击 启用或关闭 Windows 功能

低版本容器在高版本里打不开 低版本兼容高版本_DNP_08


去掉.NET Framework 3.5前面的勾选,点击确定。

低版本容器在高版本里打不开 低版本兼容高版本_低版本容器在高版本里打不开_09