เหตุใด MSBuild จึงดูใน C: \ for Microsoft.Cpp.Default.props แทนที่จะเป็น c: \ Program Files (x86) \ MSBuild (ข้อผิดพลาด MSB4019)


124

เมื่อฉันรัน msbuild เพื่อสร้างโปรเจ็กต์ vc2010 ฉันได้รับข้อผิดพลาดต่อไปนี้:

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: \ Program File (x86) \ MSBuild
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolVersions \ V4.0 VCTargetsPath ตั้งค่าเป็น $ (MSBuildExtensionsPath32) \ Microsoft.Cpp \ v4.0 \
  • เมื่อรัน msbuild / verbosity: diag as good system แสดง MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath ตั้งค่าเป็นEnvironment เมื่อเริ่มสร้าง
  • การตั้งค่า MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath ที่ตั้งค่าเป็นตัวแปรสภาพแวดล้อมในเชลล์ไม่ทำให้แสดงเป็นสภาพแวดล้อมเมื่อเริ่มสร้าง

พยายามแก้ไข

  • ถอนการติดตั้ง. net 4.5 ซ่อม. net 4.0
  • ตั้งค่า MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath ในตัวแปรระบบ

ดูเหมือนว่า MSBuildExtensionsPath32 ไม่ได้รับการตั้งค่าอย่างถูกต้องและการตั้งค่า MSBuildExtensionsPath ไม่ได้ช่วย

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

โปรดแจ้งให้เราทราบหากคุณมีแนวคิดใด ๆ ที่ขัดขวางการตั้งค่าที่เหมาะสมของตัวแปรนี้


6
ที่ดี! อีกคำถามเกี่ยวกับข้อผิดพลาดที่เกิดจากการติดตั้ง Visual Studio ที่เสียหายพร้อมวิธีแก้ปัญหาหลายร้อยรายการที่แต่ละสถานการณ์ใช้งานได้ในบางสถานการณ์เท่านั้น ...
Florian Winter

คำตอบ:


75

ฉันพบปัญหานี้เมื่อเผยแพร่แอปพลิเคชัน cocos2d-x โดยใช้เครื่องมือบรรทัดคำสั่งซึ่งเรียก MSBuild ฉันใช้ Win 7 64-bit, VS2013 express, cocos2d-x เวอร์ชัน 3.3, ติดตั้ง. NET Framework 4.5

ฉันแก้ไขปัญหาโดยตั้งค่าสิ่งต่อไปนี้ก่อนที่จะเรียกใช้คำสั่ง cocos.py เผยแพร่:

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

สิ่งนี้ช่วยฉันในการติดตั้งแพ็คเกจโหนด oracledb ฉันทำตามคำแนะนำในcommunity.oracle.com/docs/DOC-931127และถึงอย่างนั้นฉันก็ได้รับข้อผิดพลาด MSB4019 ซึ่งฉันได้แก้ไขด้วยคำตอบนี้
Pedro Otero

1
เวอร์ชัน PowerShell:[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine")
fiat

ช่วยด้วยพา ธ ที่ลงท้ายด้วย 'v4.0'
Alexander

50

สำหรับผู้ที่ไม่ปฏิบัติตามคำสั่ง MS proscribed (ดูคำตอบของ Xv ) คุณยังสามารถแก้ไขปัญหาได้

MSBuild ใช้VCTargetsPathเพื่อค้นหาคุณสมบัติ cpp เริ่มต้น แต่ไม่สามารถเนื่องจากรีจิสทรีไม่มีค่าสตริงนี้

ตรวจสอบค่าสตริง

  • เปิด regedit
  • Navigator ถึง HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • ตรวจสอบVCTargetsPathคีย์ ค่าควร = " $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\"

เพื่อแก้ไข

  • เปิด regedit Navigator ไปที่ HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • เพิ่มค่าสตริง VCTargetsPath
  • ตั้งค่าเป็น " $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\"

หมายเหตุ: HKLMย่อมาจากHKEY_LOCAL_MACHINE.


12
มีรายการรีจิสทรีสำหรับฉันแล้ว ฉันต้องกำหนดตัวแปรสภาพแวดล้อมด้วยชื่อนั้นที่ตั้งเป็นค่าในรีจิสทรีเพื่อให้ผ่านพ้นไปได้:set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0
elmotec

12
สำหรับฉันมันใช้ได้กับชุดนี้เท่านั้นVCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120
ygaradon

1
@ cmm-user HKLM ย่อมาจากHKEY_LOCAL_MACHINEคุณควรมีไว้ใน regedit
Michael Johnston

4
VCTargetsPath ไม่ใช่คีย์ แต่เป็น String Value!
John Smith

5
สำหรับฉันตอนนี้set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140
Daniel Gray

26

ฉันมีปัญหาเดียวกันเมื่อเร็ว ๆ นี้และหลังจากติดตั้งแพ็คเกจที่แตกต่างกันในลำดับที่ต่างกันมันก็ยุ่งมาก จากนั้นฉันก็พบ repo นี้ - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

ติดตั้งเครื่องมือ Python & VS Build ที่จำเป็นในการคอมไพล์โมดูลโหนดส่วนใหญ่ มันได้ผล!


1
สิ่งที่ดี แต่ไม่ได้ผลสำหรับ Azure น่าเสียดาย
Aleksey Kontsevich

6
สำหรับผู้ที่อาจมีปัญหาเช่นฉัน ฉันต้องการ--productionตัวเลือก npm install --global --production windows-build-tools ตามคำแนะนำในการติดตั้ง node-
gyp

16

สำหรับ Visual Studio 2017 และ 2019 บน Windows 10

คำตอบมากมายที่นี่ใช้กับ Visual Studio เวอร์ชันเก่า สิ่งที่ใช้ได้ผลสำหรับฉันถ้าใช้ Visual Studio 2017 เวอร์ชัน Community คือการตั้งค่าตัวแปรสภาพแวดล้อมที่เรียกว่าVCTargetsPathและให้ค่าเป็น

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets

หากใช้ Visual Studio 2019 Community เวอร์ชัน

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160

คำตอบอื่น ๆ ที่นี่ตั้งค่าตัวแปรนี้เป็นc:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140แต่ฉันสังเกตเห็นในการติดตั้ง Visual Studio ของฉันไม่มีโฟลเดอร์ชื่อ Microsoft.Cpp ในโฟลเดอร์ MSBuild ของฉัน ดังนั้นโปรดคำนึงถึงสิ่งนี้รวมทั้งข้อเท็จจริงที่ว่าเส้นทางข้างต้นมีไว้สำหรับ Visual Studio 2017 เวอร์ชันชุมชน

ตรวจสอบให้แน่ใจว่าเส้นทาง MSBuild ของคุณในตัวแปรสภาพแวดล้อมของคุณชี้ไปที่ MSBuild เวอร์ชันที่ถูกต้องหากคุณใช้ Visual Studio 2017 Community เวอร์ชัน

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

หากคุณใช้ Visual Studio 2019 Community เวอร์ชัน

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

1
ในของฉัน VCTargetPath คือ C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ Common7 \ IDE \ VC \ VCTargets
Madura Pradeep

1
อาจเป็นMicrosoft Visual Studio\2019\BuildToolsหรือรูปแบบที่คล้ายกันก็ได้และฉันคิดว่าแทนที่จะเป็น BuildTools และ Community คุณสามารถมี Professional และ Enterprise vswhere.exe -products * -property installationPathจะค้นหาชุดค่าผสมทั้งหมดและส่งคืนตำแหน่งของผลิตภัณฑ์ที่ติดตั้งทั้งหมด
MSalters

1
'vswhere.exe' is not recognized as an internal or external command, operable program or batch file.
Andrew Koster

13

การติดตั้งMicrosoft Visual C ++ 2010 Service Pack 1 Compiler Update สำหรับ Windows SDK 7.1แก้ไขMSB4019ข้อผิดพลาดที่ฉันได้รับการสร้างบน Windows7 x64

Readme ของการอัปเดตนั้นระบุว่าคำสั่งซื้อที่แนะนำคือ

  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 SP1
  4. Visual C ++ 2010 SP1 Compiler Update สำหรับ Windows SDK 7.1

โอวตกลง. ฉันคิดหาวิธีแก้ไขสำหรับสิ่งนี้แล้ว เพิ่มคีย์รีจิสทรีที่หายไป ฉันจะโพสต์และอัปเดตเอกสารการตั้งค่าของฉันเพื่อทำตามคำสั่งนี้
Peter Kahn

6

บนระบบ 64 บิต MSBuild จะใช้คุณสมบัติต่อไปนี้เป็นค่าเริ่มต้น (โดยที่ C: คือ SystemDrive):

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

หากไม่เป็นเช่นนั้นหมายความว่าคุณได้ติดตั้งเป้าหมายการลบล้างบุคคลที่สามที่กำหนดเองไว้แล้วหรือการติดตั้ง MSBuild ของคุณเสียหาย

สิ่งที่ต้องลอง:

  • ซ่อมติดตั้ง. NET
  • ใช้ Visual Studio Service Pack ล่าสุด
  • ตั้งค่าMSBuildExtensionsPathด้วยตนเองตามด้านบน (สังเกตx86ส่วนบนเครื่อง 64 บิต)

2
ขอบคุณ แต่ยังไม่ได้ตั้งค่าหลังจาก: 1) ซ่อม. net 4.5, 2) ถอนการติดตั้ง. net 4.5 และซ่อมแซม 4.0 ถ้าฉันตั้งค่าด้วยตนเองในสภาพแวดล้อมมันก็ใช้ไม่ได้เช่นกัน
Peter Kahn

5

ฉันมีปัญหานี้ใน Visual Studio 2015 edition เมื่อฉันใช้ cmake เพื่อสร้างโครงการข้อผิดพลาดนี้ปรากฏขึ้น

ข้อผิดพลาด MSB4019: ไม่พบโครงการที่นำเข้า "D: \ Microsoft.Cpp.Default.props"

ฉันแก้ไขโดยการเพิ่ม String

VCTargetsPath

ด้วยคุณค่า

$ (MSBuildExtensionsPath32) \ Microsoft.Cpp \ v4.0 \ V140

ในเส้นทางรีจิสทรี

HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 14.0


เสร็จแล้ว รีสตาร์ท cmd หลังจากนั้น แต่ไม่สามารถแก้ไขปัญหาได้
แดน

4

MSBuild ในเครื่องมือสร้างอิสระที่มักมาพร้อมกับเครื่องมืออื่น ๆ อาจได้รับการติดตั้งบนคอมพิวเตอร์ของคุณด้วย. NET (เวอร์ชันเก่ากว่า), Visual Studio (เวอร์ชันใหม่กว่า) หรือแม้แต่ Team Foundation Build

MSBuild ต้องการไฟล์คอนฟิกูเรชันคอมไพเลอร์ ฯลฯ (ชุดเครื่องมือ) ที่ตรงกับเวอร์ชันของ Visual Studio หรือ TFS ที่จะใช้รวมถึงเวอร์ชันของ. NET ที่จะคอมไพล์ซอร์สโค้ด

ขึ้นอยู่กับวิธีการติดตั้ง MSBuild ไฟล์คอนฟิกูเรชันอาจอยู่ในพา ธ เหล่านี้อย่างน้อยหนึ่งเส้นทาง

  • C: \ Program ไฟล์ (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \
  • C: \ Program ไฟล์ (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \
  • C: \ Program ไฟล์ (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \

ตามที่อธิบายไว้ในคำตอบอื่นรายการรีจิสตรีและ / หรือจุดตัวแปรสภาพแวดล้อมต้องไปที่พา ธ ToolSet

  • คีย์ VCTargetsPath ภายใต้ HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0
  • ตัวแปรสภาวะแวดล้อม VCTargetsPath

ในบางครั้งการดำเนินการเช่นการติดตั้งเครื่องมือจะปล่อยให้รีจิสทรีและ / หรือตัวแปรสภาพแวดล้อมตั้งค่าไม่ถูกต้อง คำตอบอื่น ๆ คือรูปแบบต่างๆในการแก้ไข

สิ่งเดียวที่ฉันต้องเพิ่มคือตัวแปรสภาพแวดล้อมไม่ได้ผลสำหรับฉันเมื่อฉันออกจากการต่อท้าย \


นี้! เรามีปัญหากับ build agent ของเราที่ไม่มีการติดตั้ง VS2017 แบบเต็ม เราติดตั้ง "ภาระงาน" ใหม่ด้วยชุดเครื่องมือ VC ที่กำหนดไม่ใช่ส่วนประกอบแต่ละส่วนและทำการติดตั้งอย่างถูกต้อง เราสงสัยว่าโปรแกรมติดตั้ง Visual Studio ไม่ได้ใส่ชุดเครื่องมือ v141 ที่ถูกต้องภายใต้ VS2017 ระหว่างการติดตั้งการเลือกส่วนประกอบแบบกำหนดเองของเรา
Lars Pellarin

สำหรับฉันสิ่งนี้ช่วยแก้ไขได้ - สคริปต์ที่ฉันใช้ "เป็นประโยชน์" ในการค้นหา msbuild.exe ที่ไม่ถูกต้องและเรียกมันอย่างชัดเจน
Scovetta

4

รายการรีจิสทรีสำหรับคีย์ MSBuild ทำงานได้ดีสำหรับฉัน สิ่งสำคัญคือต้องจำไว้ว่าต้องทำสำหรับสาขา 64 บิตหรือ 32 บิตขึ้นอยู่กับเวอร์ชันของ MSBuild ที่คุณเรียกใช้ ฉันไม่แนะนำให้ใช้ตัวแปรสภาพแวดล้อมเนื่องจากอาจทำให้เกิดปัญหาใน MSBuild เวอร์ชันต่างๆ

ไฟล์รีจิสทรีนี้แก้ไขสำหรับทั้งสองกรณี:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"


3

แก้ไข: ใช้กับ Visual Studio / MSBuild เวอร์ชันเก่ากว่า (โดยเฉพาะ MSVC2015?) ด้วยเวอร์ชันที่ทันสมัยกว่า MSBuild จะรวมอยู่ใน Visual Studio Build Tools 2019 และคอมไพเลอร์จะอยู่ในที่ต่างๆและตรวจพบในรูปแบบต่างๆ

สาเหตุนี้เกิดจากชุดเครื่องมือ MSBuild และการตั้งค่ารีจิสทรีที่ติดตั้งไม่ตรงกัน อาจเกิดขึ้นได้หากคุณทำอย่างใดอย่างหนึ่งต่อไปนี้:

  • ติดตั้ง Visual Studio หลายเวอร์ชันในลำดับที่ไม่ถูกต้อง
  • ถอนการติดตั้ง Visual Studio อย่างน้อยหนึ่งเวอร์ชัน
  • ทำการเปลี่ยนแปลงรีจิสทรีด้วยตนเองหรือแก้ไขการติดตั้ง Visual Studio

ทางออกเดียวที่ปลอดภัยและเชื่อถือได้คือการติดตั้งระบบปฏิบัติการของคุณใหม่ ถ้าโครงการของคุณต้องการสร้าง Visual Studio หลายเวอร์ชันให้ติดตั้งเวอร์ชันที่เก่าที่สุดก่อนรุ่นที่เก่าแก่ที่สุดเป็นครั้งแรกจากนั้นแก้ไขโค้ดของคุณเพื่อให้คุณสามารถใช้เครื่องมือเดียวในการสร้างได้ไม่เช่นนั้นคุณหรือเพื่อนร่วมงานของคุณจะกลับมายุ่งอีกในไม่ช้า

หากนี่ไม่ใช่ตัวเลือกสำหรับคุณก่อนอื่นให้อ่านhttps://stackoverflow.com/a/41786593/2279059เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับปัญหาและ "วิธีแก้ปัญหา" ต่างๆที่ทำได้จริง จากนั้นขึ้นอยู่กับเวอร์ชัน Visual Studio และการตั้งค่าของคุณคำตอบหรือรูปแบบอื่น ๆ อาจช่วยได้ในที่สุด

คำแนะนำเพิ่มเติม:


2

การติดตั้งMicrosoft Visual C ++ 2010 Service Pack 1 Compiler Update สำหรับ Windows SDK 7.1ใช้ได้ผลสำหรับฉัน อย่างไรก็ตามฉันประสบปัญหากับการอัปเดตเนื่องจากฉันได้ติดตั้ง VS 2010 และ VS 2010 SP1 แล้ว ดังที่ได้กล่าวไว้ใน Xvข้างต้นไฟล์ readme.htm มีวิธีแก้ปัญหาสำหรับปัญหาการติดตั้งที่พบบ่อยที่สุดในส่วน "ปัญหาที่ทราบ" ฉันจะทำตามคำแนะนำใน readme.htm และรีบูตเครื่องของคุณหลังจากพยายามแก้ไขปัญหาแต่ละครั้งเนื่องจากการติดตั้งบางอย่างเขียนลงในรีจิสทรีของคุณ


2

ในกรณีของฉันฉันได้เพิ่มตัวแปรสภาพแวดล้อมVCTargetPathด้วยเส้นทาง

"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ VC \ VCTargets \"

('\' ในตอนท้ายมีความสำคัญเนื่องจากไฟล์โซลูชันโครงการมีการอ้างอิงถึงไฟล์ "Microsoft cpp target"

นอกจากนี้การเริ่มต้นจาก Visual Studio 2017 MSBUILD มาพร้อมกับ Visual Studio ดังนั้นจึงPATH variableจำเป็นต้องอัปเดตด้วย

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin

การอัปเดตVCTargetPathและPATHตัวแปรของ MSBUILD และการสร้างแก้ไขข้อผิดพลาด


0

ฉันพบข้อผิดพลาดนี้โดยการเขียนสคริปต์ Build ที่จะทำให้ MSBuild อยู่ใน% PATH% หลังจากการขุดซ้ำผ่านโฟลเดอร์ C: \ Windows \ Microsoft.NET สำหรับไฟล์ MSBuild.exe ที่พบ Hit ที่พบล่าสุดคือไดเร็กทอรีที่วางบนพา ธ เนื่องจากdirคำสั่งจะเข้าสู่Framework64โฟลเดอร์หลังจากที่Frameworkฉันได้รับ MSBuilds 64 บิตตัวใดตัวหนึ่งบนเส้นทางของฉัน ฉันกำลังพยายามสร้างโซลูชัน Visual Studio 2010 และแก้ไขสตริงการค้นหาของฉันจากC:\Windows\Microsoft.NETเป็นเป็นC:\Windows\Microsoft.NET\Frameworkเพื่อที่ฉันจะจบลงด้วย MSBuild.exe 32 บิต ตอนนี้ไฟล์โซลูชันของฉันสร้างขึ้น


0

ฉันเพิ่งเพิ่มVCTargetsPath={c:\...}เป็นตัวแปรสภาพแวดล้อมในงานฮัดสันของฉัน


0

สำหรับเร็กคอร์ดไฟล์Microsoft.Cpp.Default.propsสามารถแก้ไข env var VCTargetsPathและทำให้การใช้งานในภายหลังของ var นั้นไม่ถูกต้อง ฉันมีปัญหานั้นและแก้ไขได้โดยการตั้งค่าVCTargetsPath10และVCTargetsPath11เป็นค่าเดียวกันกับVCTargetsPathเป็นค่าเดียวกันกว่า

สิ่งนี้ควรปรับให้เข้ากับเวอร์ชัน VS ที่คุณใช้


0

ฉันเห็นสิ่งนี้ในสภาพแวดล้อม VS2017 สคริปต์การสร้างของฉันเรียกVsDevCmd.batก่อนและเพื่อแก้ปัญหานี้ฉันตั้งค่าVCTargetsPathตัวแปรสภาพแวดล้อมหลังจากVsDevCmdและก่อนที่จะเรียก MSBuild:

set VCTargetsPath=%VCIDEInstallDir%VCTargets

0

การเพิ่มคำตอบของ Chris Gong เกี่ยวกับ VS2017 / 2019 ข้างต้น (ฉันยังไม่มีสิทธิ์แสดงความคิดเห็น)

หาก VS 2019 Build Tools ได้รับการติดตั้งแทนที่จะเป็น Visual Studio แบบเต็มพา ธ ไฟล์จะแตกต่างกันเล็กน้อย VCTargetsPath ควรเป็น

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\

นอกจากนี้โปรดทราบว่าเครื่องหมายทับขวาสิ้นสุด - จำเป็นอย่างน้อยในกรณีของฉัน (TFS2017, VS2019 Build tools) การเปลี่ยนแปลงที่สอดคล้องกับรายการเส้นทางเช่นกัน


0

ฉันประสบปัญหาเดียวกันกับ MSBuild สำหรับ VS 17

ฉันแก้ไขปัญหานี้โดยใช้ขั้นตอนต่อไปนี้:

  • ในกรณีของฉันMicrosoft.Cpp.Default.propsไฟล์อยู่ที่C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets ดังนั้นฉันจึงสร้างVCTragetsPathสตริงในรีจิสทรีภายใต้ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0ด้วยค่า C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

  • ฉันยังให้ Jenkins ทำงานในฐานะผู้ดูแลระบบ

สิ่งนี้ช่วยแก้ปัญหาของฉันได้


0

แทนที่จะตั้งค่าเส้นทางคงที่ให้ลองทำในบรรทัดคำสั่งหลังการสร้างก่อน:

SET VCTargetsPath=$(VCTargetsPath)

ตัวแปร '$ (VCTargetsPath)' ดูเหมือนจะเป็น c ++ ที่เกี่ยวข้องกับ visual-studio-macro ซึ่งไม่ได้แสดงใน c # -sdk-projects เป็นมาโคร แต่ยังมีอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.