2016-09-14 71 views
0

好吧,我正在使用VS2015并升级了一个旧的VC++ 2010项目,以便在VS2015中运行和编译。该项目是一个使用CLR的Windows窗体项目。使用VS2010编译VS2015项目编译器

我最近发现,该项目现在不会运行在一台vista机器上,直到最近才开始进行这项工作。我猜测主要的罪魁祸首是vista机器上缺乏.NET 4.5。所以我决定尝试使用VS 2010工具集和编译器进行编译,看看它是否可以在这台机器上运行。

我下载并安装所有的工具链SDK 7.1和7.1更新所以现在当我进入

project properties > platform toolset 

我有多个选项编译VS 2015年V140,VS 2013 V120,SDK7.1等和VS 2010 v100。

我的问题是,当试图编译我得到以下错误。

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(297,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. 


1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(62,5): error : Required file "" is missing. 

我遇到的第二个问题是我在托管String ^和常规std :: string之间切换。为此,我正在使用编组。选择VS2010工具集时,以下代码会生成错误。

#include <windows.h> 
#include <msclr/marshal.h> 
#include <msclr/marshal_cppstd.h> 

using namespace msclr::interop; 

这显然有我的代码的部分,我希望编组管理和标准之间的字符串的敲效果。

任何人有任何建议如何解决这些问题?谢谢

+0

.NET 4.5 * *在Vista上可用。它在Windows XP上不可用。顺便说一句,最早支持的.NET版本是4.5.2。您应该尝试排除原始问题,而不是尝试使用不兼容的工具。 –

+0

此外,C++本身在过去的6年中改变了很多*。 'std :: string'是一个ASCII字符串,而.NET使用Unicode。那么你必须使用非Unicode的std :: wstring或wchar类型,而今天的C++有诚实到上帝的Unicode类型和文字,例如'std :: u16string'和'char16_t' –

+0

好吧,我didn没有意识到Vista支持.NET 4.5。所以使用2015工具集进行编译对我来说很好。目标架构设置为Win32,因为最初我以为我可能会编译为64位机器并试图在32位机器上运行64位程序。但是,该程序不起作用。试图在Vista机器上运行会导致“程序停止工作”错误对话框。 –

回答

0

好吧,所以只是要继续发布我的解决方案。 不需要使用VS2010 V100工具集。

首先,我将目标机器更新到.NET 4.6。我认为最新的是4.6.2。

然后我创建了一个安装项目我的解决方案,并把它称为“PROG设置”。我包括“主要输出”“资源附属DLL”在设置项目''检测到的相关性'。该向导有助于设置这一点。

接下来,右击安装项目,选择“查看>启动条件”,右键点击.NET框架,选择“属性” 现在检查“版本”设置为与主项目相同的版本。在我的情况4.5.2。

最后,右键单击安装项目,并选择“属性”,现在选择“配置下拉菜单>发布”,点击“先决条件”并选择.NET 4.6,VC++ 14个运行时库(86/x64),Windows Installer 4.5。

好了,现在从菜单栏中“建设>配置管理器”,确保无论是安装项目和主要项目有的“建设”列下检查,以确保这两个项目的构建。

运行构建/重新构建项目。使用标准的VS2015 v140工具集。

在项目解决方案文件夹中,找到以下

VS2015>项目>项目名称> PROG设置>版本

此文件夹包含名为 '设置' 和我的“PROG应用安装'Windows安装程序包。

完成上述所有操作后,我将这两个软件包复制到一个USB存储棒,然后在目标机器上运行应用程序'Setup'

然后下载并在目标机器上安装VC++ 14 Runtime Libraries。接着,它自动运行程序设置,它安装了实际的程序软件,并且它现在运行在目标机器上。