2013-04-18 183 views
73

當我運行的MSBuild建立一個VC2010項目中,我得到以下錯誤:爲什麼MSBuild在C: for Microsoft.Cpp.Default.props而不是c: Program Files(x86) MSBuild中查找? (錯誤MSB4019)

error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists 
on disk. 
  • 的MSBuild位於C:\程序文件(x86)的\的MSBuild
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolVersions \ V4.0 VCTargetsPath設置爲$(MSBuildExtensionsPath32)\ Microsoft.Cpp \ v4.0 \
  • 當運行msbuild/verbosity:diag as good system shows MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath設置爲Environment at開始建立
  • 設置MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath設置爲shell環境變量不會導致他們的環境展示在構建開始

修復嘗試

  • 卸載.NET 4.5 ,修復.net 4.0
  • 在系統變量中設置MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath。

看來,MSBuildExtensionsPath32沒有被正確設置和設置MSBuildExtensionsPath不利於

SET MSBuildExtensionsPath="C:\Program Files\MSBuild" 

請讓我知道,如果你有什麼阻止該變量的正確設置任何想法。

由於

彼得

回答

35

對於那些誰沒有按照MS禁止令(見Xv's answer),你仍然可以解決這個問題。

MSBuild使用VCTargetsPath找到默認cpp屬性,但不能因爲註冊表缺少此字符串值。

檢查字符串值

  • 啓動註冊表編輯器
  • 導航到HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • 檢查VCTargetsPath關鍵。該值應該= 「$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

要解決

  • 啓動註冊表編輯器導航到HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • 添加字符串值VCTargetsPath
  • 設定值設定爲 「$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

注意:HKLM代表HKEY_LOCAL_MACHINE

+9

註冊表條目已經在我身邊。我必須定義一個環境變量,將該名稱設置爲註冊表中的值,以便通過該環境變量:爲我設置VCTargetsPath = c:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0' – elmotec

+8

只用這個集合'VCTargetsPath = c:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ v120' – ygaradon

+0

建立[eventstore](https://github.com/eventstore/eventstore),這個答案幫助但不完全。原來該項目構建了使用ToolsVersion 12.0的兒童項目。我通過在HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 12.0'中設置另一個字符串值「VCTargetsPath」來解決這個問題。 – Plato

6

在64位系統,MSBuild的默認爲以下性質(其中C:是系統驅動):

MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild 
MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild 
MSBuildExtensionsPath64 = C:\Program Files\MSBuild 

如果沒有,就意味着你或者安裝了一些自定義的第三方覆蓋目標,或者您的MSBuild安裝已損壞。

事情嘗試:

  • 修復.NET安裝
  • 應用最新的Visual Studio服務包
  • 設置MSBuildExtensionsPath手動如上(注意:在64位機器的x86部分)
+2

謝謝,但這些仍然沒有設置後:1)repaire .NET 4.5,2)卸載.net 4.5和修復4.0。如果我在環境中手動設置它們,它不起作用 –

12

安裝Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1修復了我在Windows7 x64上構建的MSB4019錯誤。

該更新的自述文件指出,建議的順序是

  1. Visual Studio 2010中
  2. 的Windows SDK 7。1
  3. 的Visual Studio 2010 SP1
  4. 的Visual C++ 2010 SP1編譯器更新爲Windows SDK 7.1
+0

噢好吧。我想出了這個問題的解決方法。添加缺少的註冊表項。我會發布它並更新我的設置文檔以遵循此順序 –

45

使用他們的命令行工具發佈cocos2d-x應用程序時,我調用MSBuild時遇到了這個問題。我使用Win 7 64位,VS2013 express,cocos2d-x版本3.3,安裝了.NET Framework 4.5。

我通過運行cocos.py發佈命令之前設置以下固定的問題:通過編寫構建腳本,將遞歸後把挖的MSBuild在%PATH%

SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120 
+0

''V120'在最後做了詭計! – ygaradon

+8

更改爲V140 for Express 2015並且也可以使用。 :) – Nicekiwi

+0

這幫助我安裝了oracledb節點包。我遵循https://community.oracle.com/docs/DOC-931127上的指示,甚至因此我得到錯誤MSB4019,我用這個答案解決了這個問題。 –

0

我碰到這個錯誤來了通過任何找到的MSBuild.exe文件的C:\ Windows \ Microsoft.NET文件夾。最後找到的命中是放在路徑上的目錄。由於dir命令會在Framework之後到達Framework64文件夾,因此我收到了放置在我的路徑上的64位MSBuild中的一個。我試圖構建一個Visual Studio 2010解決方案,並將搜索字符串從C:\Windows\Microsoft.NET更改爲C:\Windows\Microsoft.NET\Framework,這樣我就可以使用32位MSBuild.exe了。現在我的解決方案文件建立。

0

我剛添加VCTargetsPath={c:\...}作爲我的Hudson工作的環境變量。

7

我最近遇到了同樣的問題,在按不同順序安裝不同的軟件包後,它變得非常混亂。然後我發現這個回購 - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

它安裝Python的& VS生成所必需的編譯大多數節點模塊的工具。它工作得很好!

+0

不錯,但對Azure不起作用。 –

1

MSBuild中的一個獨立的構建工具,經常與其他工具捆綁在一起。它可能已經安裝在.NET(舊版本),Visual Studio(新版本)甚至Team Foundation Build的計算機上。

MSBuild需要與將要使用它的Visual Studio或TFS版本相匹配的配置文件,編譯器等(ToolSet),以及將針對其編譯源代碼的.NET版本。

根據MSBuild的安裝方式,配置文件可能位於一個或多個路徑中。

  • C:\ Program Files文件(x86)的\的MSBuild \ Microsoft.Cpp \ V4.0 \
  • C:\ Program Files文件(x86)的\的MSBuild \ Microsoft.Cpp \ V4.0 \ V120 \
  • C:\程序文件(x86)\的MSBuild \ Microsoft.Cpp \ V4.0 \ V140 \

在其他的答案,註冊表項和/或環境變量點必須到工具集路徑描述。

  • 下 HKLM \ SOFTWARE \微軟\的MSBuild \ ToolsVersions的VCTargetsPath鍵\ 4.0
  • 的VCTargetsPath環境變量。

偶爾,像安裝工具這樣的操作會使註冊表和/或環境變量設置不正確。其他答案都是修正它們的差異。

我要補充的唯一事情是環境變量並沒有爲我工作,當我離開的\

0

根據記錄,該文件Microsoft.Cpp.Default.props可以修改的環境變量VCTargetsPath,使後續用途的尾隨該變量不正確。 我有這個問題,並通過將VCTargetsPath10VCTargetsPath11設置爲與VCTargetsPath相同的值來解決此問題。

這應該根據您使用的VS版本進行調整。

0

我在VS2017環境中看到這個。我的構建腳本調用VsDevCmd.bat第一,而要解決這個問題,我設置VCTargetsPath環境變量VsDevCmd之後和調用的MSBuild前:

set VCTargetsPath=%VCIDEInstallDir%VCTargets 
相關問題