【分享】C++/CLI同时支持Win7和Win8/10免库的解决方法
关于C# / Visual Basic在Windows 7和Windows 8/8.1/10中免库的解决方法,请参考【.NET编写的程序在NT6.x中免装运行库的方法】,此帖的讨论对象是Visual C++和C++/CLI。

现在.NET Framework越来越普及,Windows XP也接近淘汰,C++开发者也不应该拘泥于使用MFC或者ATL,现在全面改用C++/CLI已经变得可行。和C#或Visual Basic相比,C++/CLI可以更方便地访问WinAPI相关内容,而又不牺牲.NET Framework的便捷性。使用C++/CLI唯一的缺点可能就是不能使用Windows Presentation Foundation编写应用程序了。不过很奇怪,后来的C++/CX反而又支持使用XAML编写Modern应用程序了。

众所周知,Windows 7自带.NET Framework 3.5 SP1(基于2.0运行时),而Windows 8/8.1/10以上自带.NET Framework 4.5/4.5.1/4.6(基于4.0运行时)。4.0运行时一般来说是不能运行.NET Framework 2.0-3.5的程序的。如果在Windows 8/8.1/10中运行.NET Framework 2.0-3.5程序,而又没有安装.NET Framework 3.5运行库时,会出现如下提示,需要联网安装运行库:

CLR支持Win8_4.PNG

要想同时让这两个系统不提示安装运行库,就需要将.NET版本降级至3.5,并填写XXXXXXnfig配置文件。C# / Visual Basic的免库方法我已经发过了,但是C++/CLI的要更麻烦一点,这里我讲一下在C++/CLI中必要的注意事项。

首先,要正常编译基于.NET Framework 3.5的C++/CLI程序,必须已安装Visual Studio 2008。Visual Studio 2008可在置顶帖或者『MSDN我告诉你』下载。为了方便起见,建议直接降级使用Visual Studio 2008。事实上,Visual Studio 2008这个版本是使用C++/CLI最佳的版本。VS2008对C++/CLI的IntelliSense支持要比MFC更好。后一个版本VS2010中不知道微软哪根筋搭错了,居然不支持C++/CLI的IntelliSense,好在VS2012终于加回来了,但是Windows窗体模板却消失了。

【第一步】

首先,打开Visual Studio 2008,选择『文件-》新建-》项目』,按照正常过程建立一个C++/CLI窗体工程『Visual C++ \ CLR \ Windows 窗体应用程序』:

CLR支持Win8_0.PNG

【第二步】

然后单击『项目-》添加新项』,向程序中添『实用工具 \ 配置文件 (XXXXXXnfig)』:

CLR支持Win8_1.PNG

在新建的文件中,输入以下XML文本:
<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">向4.0运行时表明该程序使用2.0的老式激活策略,对于某些混合应用程序是必要的。下面两条<supportedRuntime version="..."/>则表示这个程序在2.0和4.0运行时上都可以运行。

【重要的一步】

和C#和Visual Basic不同,Visual C++不会主动将XXXXXXnfig复制到目标路径中,并命名为XXXXXXXXXXXXXXXnfig。因此需要配置一下自定义生成步骤。

右键单击『解决方案资源管理器』中的XXXXXXnfig,选择『属性』,在『自定义生成』步骤中,填写如下:
命令行:copy /y "$(InputPath)" "$(TargetPath).config"
输出:$(TargetPath).config

XXXXXXnfig配置详图:

CLR支持Win8_2.PNG

【最后一步】

单击『生成-》生成解决方案』,在目标文件夹中,可以看到有两个文件生成:Program1.exe和XXXXXXXXXXXXXXXnfig,其中第二个文件的内容与我们所编写的XXXXXXnfig内容完全一样:

CLR支持Win8_3.PNG

将这两个文件共同发布,即可在Windows 7和Windows 8/8.1/10中均免运行库:

CLR支持Win8_5.png

[修改于 6 年前 - 2015-09-19 09:02:26]

来自:计算机科学 / 软件综合
 
acmilan 作者
6年1个月前
1楼
CLR支持Win8_6.png
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
6年1个月前
2楼
Visual Studio 2008 Team Suite
【VS2008(自带文档,集成序列号)】
ed2k://|file|zh-Hans_visual_studio_team_system_2008_team_suite_x86_dvd_XXXXXXXXXXXXo|4663904256|8E2D6430D819328940B9BF83568589FA|/
【SP1升级包(包含功能升级和文档更新)】
本体:ed2k://|file|zh-hans_visual_studio_2008_service_pack_1_x86_dvd_XXXXXXXXXXXXo|941703168|E1647161AA5CA4567B787A5606D2A065|/
文档:ed2k://|file|cn_msdn_library_for_visual_studio_2008_service_pack_1_x86_dvd_XXXXXXXXXXXXo|2547886080|9139495015368A525A598F372E5FC0C6|/
【用于VS2008 SP1的MFC向导补丁】
SP1新版MFC向导与VS2008的设计能力脱节,这个补丁是用来恢复老向导的,使用新向导建议安装VS2010以上版本。
下载:
attachment icon MFC老向导(vs2008).rar 1.63MB RAR 40次下载
【WinSDK7.0(安装Win7编程支持,包含升级版VC2008编译器,自带文档)】
32位:ed2k://|file|en_windows_software_development_kit_for_windows_7_and_windows_server_2008_r2_x86_dvd_XXXXXXXXXo|1552508928|DAD7EDAF3147C8AD59F8DDF6E9C30D22|/
64位:ed2k://|file|en_windows_software_development_kit_for_windows_7_and_windows_server_2008_r2_x64_dvd_XXXXXXXXXo|1554010112|BA7C3124B6FA9727962CEFF8BB61A2B7|/
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
5年8个月前 修改于 5年8个月前
3楼
Visual Studio 2012/2013/2015也能编写C++/CLI 3.5的程序,不过经测试编译的程序并不能在.NET 3.5上运行,仍然需要4.x运行库。所以为了与.NET 3.5兼容,仍然需要使用Visual Studio 2008编写C++/CLI 3.5程序。

新版本中上述XXXXXXnfig的编译命令要换成这个,注意%(FullPath)前面是百分号%:
copy /y "%(FullPath)" "$(TargetPath).config"
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
5年8个月前 修改于 5年8个月前
4楼
VS2008 SP1支持C++/TR1中的shared_ptr,不过还不支持C++11语法,所以不能用于数组。数组还是要使用vector。
Windows 8/8.1/10安装时不要安装附带的SQL Server 2005 Express,新系统中装上这个东西会报不兼容。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
5年8个月前 修改于 5年8个月前
5楼
个人感觉C++和.NET 3.5互操作确实有点麻烦。。。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
465
回复
2927
学术分
4
2009/05/30注册,3 年前活动
暂无简介
%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

下载

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}