好吧,我正在使用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機器上運行會導致「程序停止工作」錯誤對話框。 –