2016-09-14 135 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。接着,它自動運行程序設置,它安裝了實際的程序軟件,並且它現在運行在目標機器上。