.NET编写的程序在NT6.x中免装运行库的方法
acmilan2015/06/29软件综合 IP:四川
Visual C# / Visual Basic写的程序需要拖一个很大的运行库(3.5有二百多MB,4.x有几十MB),这是Windows XP时代.NET Framework不普及的主要原因,很多几十kb的小程序必须拖这么一个大运行库实在是大煞风景的事情。

好在现在的NT6系统都自带.NET Framework了,不过随着4.0的发布,麻烦又来了:Vista自带.NET Framework 3.0,Win7自带.NET Framework 3.5,需要手动安装.NET Framework 4.x,可是很多人嫌麻烦都不会去装(包括我)。最麻烦的是Win8默认不带.NET Framework 3.5了,而自带的.NET Framework 4.5又不能运行3.5程序,运行3.5程序时需要联网安装.NET Framework 3.5,慢不说还时有出错,相当麻烦。

.NET Framework 2.0/3.0/3.5使用2.0 Runtime,而.NET Framework 4.x使用4.0 Runtime。4.x不能运行3.5程序的主要原因是4.0的运行时不接受2.0程序,但是实际上是能够向下兼容的,不过要动一下手脚。

一、建立一个基于.NET Framework 3.5的工程
.NET Framework 2.0 Runtime最高支持.NET Framework 3.5,因此必须保证工程是基于.NET Framework 3.5的:
捕获1.png
如果已经建立了工程,那么需要改变工程版本,方法如图:
捕获4.png

二、向工程添加XXXXXXnfig文件
方法如图所示,点击项目->添加新项->常规->应用程序配置文件:
捕获2.png

三、添加运行时支持信息
编辑XXXXXXnfig,改为如下内容:
<code class="lang-xml"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup uselegacyv2runtimeactivationpolicy="true">
    <supportedruntime version="v2.0.50727">
    <supportedruntime version="v4.0">
  </supportedruntime></supportedruntime></startup>
</configuration></code>
其中<startup useLegacyV2RuntimeActivationPolicy="true">保证混合组件兼容性(如DirectX),<supportedRuntime version="v2.0.50727" />和<supportedRuntime version="v4.0" />指示程序可以在2.0和4.0运行时中运行。
捕获3.png

四、编译发布运行
目标修改为Release,编译后可在bin\Release目录下看到MyProg.exe和XXXXXXXXXXXXXnfig文件,将其放在相同目录下,即可在Win7和Win8中均免运行库。
捕获5.png
在没有安装.NET Framework 3.5的Windows 8中正常运行
Windows 8-2015-06-29-21-25-32.png

五、备份以供其它项目使用
右击工程,选择『在Windows资源管理器中打开文件夹』,把XXXXXXnfig复制到一个不容易忘记的地方保存,以后想写程序的时候就可以直接添加这个文件了。
捕获6.png
捕获7.png
捕获8.png

[修改于 9年6个月前 - 2015/06/30 00:04:29]

来自:计算机科学 / 软件综合
8
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
9年6个月前 IP:四川
775958
VS2010编译.NET 3.5的C++/CLR工程还需要装VC2008编译器。。。
而且还不能添加XXXXXXnfig配置文件,虽然手动复制一下就好了。。。
----
VC2008编译器不一定要安装VS2008,还可通过WinSDK7.0安装(但是肯定不会带有ATL和MFC)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
9年5个月前 IP:四川
779857
netfx.png
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
9年1个月前 IP:四川
798216
更好的方法应该是将4.0.30319放在2.0.50727前面,这样会优先匹配.NET 4.x:
<code class="lang-xml"><?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup uselegacyv2runtimeactivationpolicy="true">
        <supportedruntime version="v4.0.30319">
        <supportedruntime version="v2.0.50727">
    </supportedruntime></supportedruntime></startup>
</configuration></code>

如果不这样做的话,在Win8/8.1/10中运行会将控件显示为Win7样式。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
9年1个月前 IP:四川
799465
支持情况更新
以下系统不再支持新版本的框架
Windows 2000最高2.0 SP2
Windows XP最高3.5 SP1 + 4.0.3
Windows Server 2003(1.1)最高3.5 SP1 + 4.0.3
Windows Vista(3.0)最高3.5 SP1 + 4.6
以下系统可安装4.6.1
Windows 7(3.5.1)
Windows 8(4.5, 3.5.1 optional)
Windows 8.1(4.5.1, 3.5.1 optional)
Windows 10(4.6, 3.5.1 optional)
以下系统自带4.6.1
Windows 10, Version 1511(4.6.1, 3.5.1 optional)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
8年10个月前 IP:江西
808794
更正:
Windows Vista可以安装4.6.1,但是并没有在支持列表中
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年10个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}