簡體   English   中英

VS2017加載手動配置為x86的C++項目作為VS2010項目

[英]VS2017 loads C++ project that was manually configured to x86 as a VS2010 project

我剛剛更改了一個 vcxproj 文件 (C++),將 x86 作為所有解決方案構建配置的平台,而不是 Win32,這似乎是所有 C++ 項目的默認設置。 該項目加載良好,但它在解決方案資源管理器中顯示為 VS 2010 項目。 根據與我的同事的討論,我的基本假設是 Win32 與 x86 相同,但它是該平台的舊標簽,最好將其刪除並替換為 x86。 我在網上尋找類似的問題,雖然我確實發現了類似的問題,但這些建議似乎沒有幫助。

促使進行此更改的一系列事件是我們目前正在努力使我們的軟件和流程現代化,其中一部分是為我們的構建過程做好准備,最終在我為開發團隊。 不幸的是,我們一直在 CruiseControl.NET 實例上使用 devenv.exe 來構建安裝程序; 所以,對於冒煙測試,我的任務是讓 MSBuild 在我們的軟件上工作,這樣我們就可以直接使用它,而不是在 VM 上加載完整的 VS IDE。

令我震驚的是,在過去的幾個月里,我慢慢了解到 VS 和 MSBuild 彼此不一致。 沒有 VS 指導的 MSBuild 不會遵守構建順序,因此通常會構建項目並在構建依賴項之前嘗試鏈接它的依賴項。 當項目嘗試訪問相同的資源而不僅僅是阻塞時,它也會失敗。 這些問題一起讓我在 CCNet 腳本中按項目分解我們的構建,而不僅僅是構建解決方案文件。

所討論問題的特殊之處在於,MSBuild 將查看項目引用並嘗試使用父項目的配置和疊加在其上的平台來構建這些依賴項。 似乎 C# 項目將 x86 作為其默認平台,而 C++ 具有 Win32。 我們的軟件是 C#/C++/CLI Frankenstein 怪物,不一致的項目平台對我的工作造成了嚴重破壞。 由於某些奇怪的原因,MSBuild 似乎總是嘗試使用 2010 構建工具構建我們的 x86 平台項目。 這失敗了,因為我們沒有安裝它們,我們不應該安裝。

我在單獨的文本編輯器中直接對 xml 進行了這些更改,方法是復制所有 Win32 屬性組,將副本上的平台更改為 x86,保存文件,將 VS 中所有構建的配置切換到新的 x86 平台,保存解決方案,然后刪除舊的 Win32 屬性組。 這似乎有效,但我現在看到標有“Visual Studio 2010”的 C++ 項目,這向我解釋了為什么 MSBuild 一直嘗試使用 2010 構建工具,但這樣做的目的是什么?

簡而言之,問題是:為什么 VS 將 x86 平台項目加載為 2010 項目? 感謝您提供任何見解,請記住,我們已將 VS 作為我們的 IDE,並將 MSBuild 作為我們的構建程序,並且我們仍然希望我們的本地 devenv 構建工作。 我們的 C++/CLI 代碼都將被重寫為 C#,我們將來會從 CCNet 遷移,但我們希望它能夠與我們現在擁有的一起工作。

如果您修改了對“x86”的 .vcxproj 平台引用,它將無法工作,並且就 Visual C++ 而言是“未知平台”。 實際的 32 位平台名稱是“Win32”並且已經使用了很長時間。

只有“解決方案”系統被更新為處理“x86”作為“Win32”的別名。

TL;DR:恢復對 vcxproj 文件的更改。 如果需要,您可以修改 SLN 以在組合框中將其稱為“x86”而不是“Win32”。

    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|x86 = Debug|x86
        Debug|x64 = Debug|x64
        Release|x86 = Release|x86
        Release|x64 = Release|x64
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {guid}.Debug|x86.ActiveCfg = Debug|Win32
        {guid}.Debug|x86.Build.0 = Debug|Win32
        {guid}.Debug|x64.ActiveCfg = Debug|x64
        {guid}.Debug|x64.Build.0 = Debug|x64
        {guid}.Release|x86.ActiveCfg = Release|Win32
        {guid}.Release|x86.Build.0 = Release|Win32
        {guid}.Release|x64.ActiveCfg = Release|x64
        {guid}.Release|x64.Build.0 = Release|x64
    EndGlobalSection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM