约束

最近有一个winform项目,要求:

(1)程序能够运行在winxp, win7, win8, win10中

(2)安装尽可能简单,尽量不要安装.net framework。即使要安装也要尽可以地小。

为了达成这些要求的,考虑以下因素:

(1)操作系统自带的.net framework版本

以下是各个windows版本自带的.net framework:

windows版本

.net framework版本

winxp

win7

.net 3.5(包含.net3.0 .net2.0)

win8

.net 4.5

win10

.net 4.5

(2)各种操作系统的使用率

以下是2016-2017年百度统计中的操作系统占比

可以看到win7占有率最高,其次是winxp。

综合以上两上因素,决定程序的目标框架选择.net 2.0。这样一来,只有winxp需要安装.net framework 2.0,且.net framework 2.0仅20M。

问题

本来以为程序应当可以在各个操作系统上正常运行的。

但是在测试的时候,发现在win8和win10下会出现以下错误:

选择在线安装的话,速度慢得无法接受;

离线采用添加应用程序组件安装的话,需要系统光盘,很麻烦,用户无法接受;

离线安装dotnetfx2.0.exe或者dotnetfx35.exe也会出现上图的提示。

解决方法

在查看了msdn上的文档之后,找到了解决方法。添加一个app.config文件,加入以下配置:

 <?xml version="1.0" encoding="utf-8"?>

 <configuration>

     <startup>

         <supportedRuntime version="v4.0"/>

        <supportedRuntime version="v2.0.50727"/>

     </startup>

 </configuration>

配置的意思是:当发现.net4.x时,使用.net4.x,当没有.net4.x的时候,使用.net2.0

参考资料

How to: Configure an App to Support .NET Framework 4 or 4.5

https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-configure-an-app-to-support-net-framework-4-or-4-5

winform .net2.0的程序如何运行于.net 4.x的更多相关文章

  1. .net 4.0 运行时中运行.net2.0开发的程序

    其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的Sy ...

  2. (转载) .NET2.0程序集无法在.net 4.0 中运行的解决方案

    首先在MSDN上看到 4.0 的更新日志中有如下这条: .NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序. 若要使用 ...

  3. MONO 如何打包 .NET程序独立运行(winform篇)

    .NET程序独立运行是指运行.NET的电脑上,不需要安装.NET框架. .NET程序集“独立运行”并非真正的独立,它是运行在mono运行时基础之上的.由于这个运行时可以独立存在,所以,我们不需要在目标 ...

  4. ASP.NET程序也能像WinForm程序一样运行[转载]

    阅读目录 开始 操作方式 支持的ASP.NET程序类别 它也是个HTTP服务器 支持远程机器访问 不受限于Windows防火墙 尊重每个人的操作习惯 内置多标签浏览器支持 启动参数及配置文件 支持 . ...

  5. 用.net 2.0(或.net 3.5)开发的程序在.net 4.0的环境中运行的解决方案

    引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 提示需 ...

  6. AForge.NET .NET2.0程序集无法在.net 4.0 中运行的解决方案

    如有雷同,不胜荣欣,若转载,请注明 最近在项目上一直使用.net4.0 framework,突然发现一个AForge.net中使用ffmepeg下的一个dll时,提示只能在2.0下运行,在众多MSDN ...

  7. vs2012+ winform+.net4.0发布如何在xp上运行

    今天在英文版vs2013打包发布4.0(非4.0 client)的winform时,遇到了在xp上无法运行的情况,.net framework 4.0在xp上已安装.在打包前,winform工程,即菜 ...

  8. C#程序双击运行之后,界面不显示,但是在任务管理器有进程(一个winform找bug之旅)

    最近客户端又出了奇葩事情:http://q.cnblogs.com/q/43038/ 如这篇博问一样.我的一个客户的电脑上程序打开了,进程也有了,就是界面窗体出不来!!! 我是win7是开发机,三四台 ...

  9. .Net2.0 --Winform结合WebBrowser控件和Socket老技术来实现另类Push~

    原文:.Net2.0 --Winform结合WebBrowser控件和Socket老技术来实现另类Push~ 目前的企业级开发比较流行的是Web2.0技术,但是由于Web技术基于请求--响应的交互模式 ...

随机推荐

  1. Unity中提升像素字体清晰度

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity5.6.0f3 Unity UI系统是非常好的,但默认情况下,使用像像素艺术风格游戏那样需要非常锋利的边框的字体 ...

  2. Linux services, runlevels, and rc.d scripts

    Reference: [1] https://www.linux.com/news/introduction-services-runlevels-and-rcd-scripts A Linux se ...

  3. 【CSS Cookbook】笔记摘要(一)

    概要 CSS的优点:将表现和内容相分离:更好地控制页面布局:大大减少了文件尺寸:缩短了改版时间:提高了易用性. CSS全称层叠式样表(Cascading Style Sheets). 1.问题:如何最 ...

  4. Amazing ASP.NET Core 2.0

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

  5. 日志组件二:log4j2

    一.背景 随着业务服务(Server App)逐渐增加,我们的业务系统中的日志输出面临的问题越来越多,高并发下对磁盘io这块消耗的越来越大,因此,急需要一个高性能且最好能够支持异步输出日志的日志框架, ...

  6. Lesser known dplyr tricks

    In this blog post I share some lesser-known (at least I believe they are) tricks that use mainly fun ...

  7. data.table包简介

    data.table包主要特色是:设置keys.快速分组和滚得时序的快速合并.data.table主要通过二元检索法大大提高数据操作的效率,同时它也兼容适用于data.frame的向量检索法. req ...

  8. 用超链接传递数组或get方式

    <?php /** * 超链接传递数组参数 */ if($_GET['names']){ $arr=explode('-',$_GET['names']);//将数组分割为字符串 print_r ...

  9. php面向对象3

    类的定义 基本定义 class 类名{ 访问修饰符 成员属性; 访问修饰符 成员方法; } 说明: ①类一定要class关键词修饰 ②类名的规范说明,使用大驼峰法 ③php 中,类名不区分大小写.但是 ...

  10. 转换String三种方式比较:toString()、String.valueOf()、(String)

    简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法在使用的时候是有些特殊的.一般情况下,如果是确定类型的n ...