好吧,我正在使用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;
这显然有我的代码的部分,我希望编组管理和标准之间的字符串的敲效果。
任何人有任何建议如何解决这些问题?谢谢
.NET 4.5 * *在Vista上可用。它在Windows XP上不可用。顺便说一句,最早支持的.NET版本是4.5.2。您应该尝试排除原始问题,而不是尝试使用不兼容的工具。 –
此外,C++本身在过去的6年中改变了很多*。 'std :: string'是一个ASCII字符串,而.NET使用Unicode。那么你必须使用非Unicode的std :: wstring或wchar类型,而今天的C++有诚实到上帝的Unicode类型和文字,例如'std :: u16string'和'char16_t' –
好吧,我didn没有意识到Vista支持.NET 4.5。所以使用2015工具集进行编译对我来说很好。目标架构设置为Win32,因为最初我以为我可能会编译为64位机器并试图在32位机器上运行64位程序。但是,该程序不起作用。试图在Vista机器上运行会导致“程序停止工作”错误对话框。 –