ไม่พบ Microsoft.WebApplication.targets บนเซิร์ฟเวอร์การสร้าง ทางออกของคุณคืออะไร


410

การพยายามสร้างโครงการของฉันบนเซิร์ฟเวอร์การสร้างทำให้ฉันมีข้อผิดพลาดต่อไปนี้:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

ฉันแก้ไขปัญหานี้เมื่อไม่กี่เดือนที่ผ่านมาโดยติดตั้ง Visual Studio 2010 บน Build Server แต่ตอนนี้ฉันติดตั้งเซิร์ฟเวอร์ใหม่ตั้งแต่เริ่มต้นและฉันต้องการทราบว่ามีวิธีแก้ไขปัญหาที่ดีกว่านี้หรือไม่


1
เลิกใช้งานแอปพลิเคชันโครงการหรือไม่ ฉันสงสัยว่าเหตุผลที่ต้องใช้ Visual Studio เวอร์ชันเก่าเพื่อที่จะสร้างมันขึ้นมา?
ไบรอันรี่

1
คุณสามารถนำไปใช้งานผ่านเซิร์ฟเวอร์บิลด์ได้หรือไม่? เช่นฉันไม่มีฉันยังมีโครงการติดตั้งเว็บแยกต่างหากในโซลูชัน ... และมันยังต้องการสิ่งที่เป็นเลือด ... answer = ลบออกจากไฟล์ proj! ง่าย.
Paul Zahra

มีความเกี่ยวข้องอย่างยิ่ง: MS-Build 2017“ Microsoft.WebApplication.targets” หายไป
Wai Ha Lee

1
แก้ไขโดยแทนที่<Import Project="..\Packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />เส้นทางด้วย$(VSToolsPath)เป็น:<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
GJ

คำตอบ:


207

หากต้องการตอบชื่อคำถาม (แต่ไม่ใช่คำถามเกี่ยวกับผลลัพธ์ที่คุณได้รับ):

การคัดลอกโฟลเดอร์ต่อไปนี้จากเครื่อง dev ของคุณไปยังเซิร์ฟเวอร์การสร้างของคุณจะแก้ไขได้หากเป็นเพียงเว็บแอปพลิเคชัน

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

ลบ x86 ตามวิธีสร้างงานของคุณ หากคุณมีโครงการประเภทอื่น ๆ คุณอาจต้องคัดลอกโฟลเดอร์ msbuild ทั้งหมด


11
สิ่งนี้ใช้ได้กับ m2 ด้วยโครงการ VS2012 หลังจากเปลี่ยน v10.0 เป็น v11.0
DenNukem

2
ไม่สามารถติดตั้งเครื่องมือ MSBuild แทนสิ่งนี้ได้ใช่ไหม microsoft.com/en-us/download/confirmation.aspx?id=40760
user20358

1
อนึ่งการติดตั้งเครื่องมือ MSBuild ไม่เพียงพอที่จะสร้างโครงการที่รวบรวมการปรับใน VisualStudio 2013
Michael Shaw

ฉันต้องคัดลอกเว็บโฟลเดอร์ไปที่ v11.0 เพื่อให้มันทำงานได้หลังจากติดตั้ง VS2013 มันหายไปที่นั่น สามารถคอมไพล์ใน VS แต่ไม่ผ่าน MSBUILD โดยตรง
Martin Braun

9
ทำงานให้กับ VS2017 เพียงคัดลอกไฟล์ C: \ Program (x86) \ MSBuild \ Microsoft \ VisualStudio \ vXX.0 \ WebApplications ไปยังไฟล์ C: \ Program (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications
jokab

95

ไม่รองรับการสร้างและการเผยแพร่ WAP หากไม่ได้ติดตั้ง VS กับที่กล่าวว่าถ้าคุณไม่ต้องการที่จะติดตั้ง VS %ProgramFiles32%\MSBuild\Microsoft\แล้วคุณจะต้องคัดลอกไฟล์ทั้งหมดที่อยู่ภายใต้

คุณจะต้องติดตั้งเครื่องมือปรับใช้เว็บด้วย ฉันคิดว่ามันเป็น


4
Sayed - ดูคำตอบจาก dansomething ด้านล่าง - คำตอบของคุณถูกต้องหรือไม่? แม้แต่การติดตั้งแพคเกจแบบบูรณาการ VS 2010 Shell แล้วและ. NET SDK จะไม่ถูกต้องติดตั้งการสนับสนุนโครงการเว็บแอปพลิเคชัน?
อดัม

@SayedIbrahimHashimi คุณต้องลงทะเบียน DLLs กับ GAC หรือไม่หากคุณทำสำเนาโฟลเดอร์ด้วยตนเอง
TheOptimusPrimus

แล้ว Microsoft.TextTemplating.targets ล่ะ ฉันต้องทำอย่างไรเพื่อให้พวกมันเข้าโฟลเดอร์ C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0
นักพัฒนา

@ClarkKent ขออภัยฉันไม่สามารถพูดกับไฟล์ TextTemplating ฉันไม่คุ้นเคยกับสิ่งเหล่านั้น
อิบราฮิมฮาชิมิ

77

UPD: ตั้งแต่ VS2017 มีภาระงานในเครื่องมือสร้างที่ขจัดปัญหานี้ได้อย่างสมบูรณ์ ดูคำตอบ @SOReader

หากคุณไม่ต้องการแก้ไขสิ่งใดบนบิลด์เซิร์ฟเวอร์และคุณยังต้องการให้โปรเจ็กต์สร้างจากการควบคุมแหล่งที่มามันอาจเป็นความคิดที่ดีที่จะวางไบนารีที่จำเป็นภายใต้การควบคุมของแหล่งที่มา คุณจะต้องแก้ไขส่วนการนำเข้าในไฟล์โครงการของคุณเพื่อให้มีลักษณะดังนี้:

<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

บรรทัดแรกคือการนำเข้าจริงจากตำแหน่งใหม่ที่สัมพันธ์กับไดเรกทอรีโซลูชัน ส่วนที่สองคือรุ่นปิด ( Condition="false") ของบรรทัดต้นฉบับที่อนุญาตให้ Visual Studio ยังคงพิจารณาว่าโครงการของคุณเป็นโครงการแอปพลิเคชันเว็บที่ถูกต้อง (นั่นคือเคล็ดลับที่ VS 2010 SP1 ทำเอง)

อย่าลืมคัดลอกC:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplicationsไปยังBuildTargetsโฟลเดอร์ภายใต้การควบคุมแหล่งที่มาของคุณ


วิธีนี้ใช้ได้ผลสำหรับฉันและเป็นตัวเลือกที่ดีที่สุดในกรณีของฉัน นี่เป็นเพราะฉันไม่สามารถเข้าถึงเซิร์ฟเวอร์สร้าง ฉันใช้ Elastic bamboo ของ Atlassian ซึ่งหมุนเซิร์ฟเวอร์ใหม่เพื่อทำหน้าที่เป็น build server ไม่ปรากฏอย่างรวดเร็วในครั้งแรกที่ AMIs เหล่านี้รวมถึงเป้าหมายเว็บแอปพลิเคชัน? นั่นไม่สมเหตุสมผลสำหรับฉัน แต่มันเป็นอย่างไร
Cody Clark

1
นี่เป็น aproach ที่ดี แต่การเปลี่ยนแปลงนี้ต้องการไฟล์ csproj แต่ละไฟล์ที่จะเปลี่ยน มันยากหากคุณเพิ่มโครงการใหม่เพื่อแก้ไข แน่นอนมันสามารถแก้ไขได้ด้วยแม่แบบโครงการที่กำหนดเอง แต่ยัง .. อย่างไรก็ตามคำตอบนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้อง ขอบคุณ!
100r

75

ตอนนี้ในปี 2560 คุณสามารถติดตั้ง WebApplication redists ด้วย MSBuildTools เพียงไปที่หน้านี้เพื่อดาวน์โหลดเครื่องมือ MSBuild 2017 และในขณะที่การติดตั้งคลิกWeb development build toolsเพื่อรับเป้าหมายเหล่านี้ติดตั้งเช่นกัน: ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้จะนำไปสู่การติดตั้งไลบรารีที่ขาดหายไปC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationsตามค่าเริ่มต้น


2
ฉันประหลาดใจมากที่อายุห้าขวบของฉันเกี่ยวกับการจัดเก็บ libs ลงในการควบคุมแหล่งที่มาและการปรับเปลี่ยนยังคงได้รับการโหวตแม้ในทุกวันนี้
Andriy K

2
@AndriyK วิธีการแก้ปัญหาของคุณแตกต่างจากที่ฉันแนะนำและฉันเข้าใจว่าทำไมบางคนอาจชอบคุณมากกว่าฉัน ... เว้นแต่จะเป็นแค่ความเกียจคร้าน D
SOReader

2
เมื่อต้องการทำให้เป็นทั่วไปมากขึ้นสำหรับ Visual Studio รุ่นอนาคตคุณสามารถดาวน์โหลดเครื่องมือสร้างล่าสุดจากvisualstudio.microsoft.com/downloads เลื่อนหน้าลงและใกล้ด้านล่างขยายส่วน "เครื่องมือสำหรับ Visual Studio" จากนั้นดาวน์โหลด " สร้างเครื่องมือสำหรับ Visual Studio " ปัจจุบันมีไว้สำหรับ VS 2017 แต่ฉันคิดว่ามันจะเหมือนกันสำหรับเวอร์ชั่นในอนาคต ถ้าคุณต้องการพา ธ ไปยัง msbuild.exe สำหรับเครื่องมือ CI ของคุณ (เช่น Jenkins) สำหรับ VS 2017 จะถูกติดตั้งที่ C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ msbuild.exe
Simon Tewsi

2
การสร้างเซิร์ฟเวอร์ที่เข้ากันได้ (อ่าน: บรรทัดคำสั่ง) choco install visualstudio2017-workload-webbuildtoolsวิธีการทำเช่นนี้คือ
พอลฮิกส์

1
นอกจากนี้ยังทราบว่า"การพัฒนาเว็บสร้างเครื่องมือ" แพคเกจ , สามารถติดตั้งผ่านทางบรรทัดคำสั่งโดยการเรียกMicrosoft.VisualStudio.Workload.WebBuildTools vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildToolsเพิ่ม--passiveเพื่อไม่ต้องการการแทรกแซงของผู้ใช้
Wai Ha Lee

70

นอกจากนี้คุณยังสามารถใช้แพ็คเกจ NuGet MSBuild.Microsoft.VisualStudio.Web.targetsอ้างอิงพวกเขาภายในโครงการ Visual Studio ของคุณจากนั้นเปลี่ยนการอ้างอิงของคุณตามที่ Andriy K แนะนำ


2
มันเป็นไปไม่ได้ที่จะใช้เพราะฉันต้องเปิดวิธีแก้ปัญหาก่อน แต่ก็ทำไม่ได้เพราะข้อผิดพลาด
นักพัฒนา

หากมีมากกว่าหนึ่งโครงการในโซลูชันคุณควรจะยังสามารถ 1. เปิดโซลูชัน - ละเว้นว่าโครงการเว็บไม่โหลด 2. เพิ่มการอ้างอิง nuget; 3. ใช้หนึ่งในแนวทางที่กล่าวถึงหลังจากนั้น คุณสามารถแก้ไขไฟล์โครงการด้วยตนเองหรือลบล้างตัวแปร env.VSToolsPath ใน TeamCity
เดมอน

1
นี่เป็นแพคเกจนักเก็ต MS ที่วางจำหน่ายอย่างเป็นทางการหรือมีใครบางคนสร้างมันขึ้นมา?
Simon_Weaver

โซลูชั่นที่ยอดเยี่ยม - ใช้งานได้กับ VS รุ่นต่างๆ ฉันต้องการแก้ไขไฟล์. csproj, YMMV
Jonno

39
ไม่ใช่แพคเกจ Microsoft nuget ที่วางจำหน่ายอย่างเป็นทางการ ฉันรู้เพราะฉันสร้างมันขึ้นมา
mak

54

ขึ้นอยู่กับโพสต์นี้ที่นี่คุณสามารถดาวน์โหลดMicrosoft Visual Studio 2010 Shell (รวม) แพคเกจแจกจ่ายต่อได้และติดตั้งเป้าหมาย

สิ่งนี้จะช่วยหลีกเลี่ยงความจำเป็นในการติดตั้ง Visual Studio บนเซิร์ฟเวอร์บิลด์

ฉันเพิ่งลองใช้งานตอนนี้และสามารถตรวจสอบได้ว่ามันใช้งานได้:

ก่อน:

ข้อผิดพลาด MSB4019: ไม่พบโครงการนำเข้า "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets" ยืนยันว่าเส้นทางในการประกาศนั้นถูกต้องและไฟล์นั้นมีอยู่ในดิสก์

หลังจากการติดตั้ง:

[สร้างอย่างถูกต้อง]

นี่เป็นทางออกที่ดีกว่าการติดตั้ง Visual Studio บนบิลด์เซิร์ฟเวอร์แน่นอน


7
นี่คือ IMO ที่ง่ายและง่ายที่สุดในการแก้ปัญหา ฉันกำลังใช้ VS 2013 และฉันพบว่า Visual Studio 2013 Shell (ตัวแยก) สามารถแจกจ่ายต่อได้คือสิ่งที่ใช้งานได้ (ตัวแบบรวมจะไม่ติดตั้งเนื่องจากขึ้นอยู่กับตัวแยก)
Matt Miller

@MatthewSkelton - ความหมายของการสร้างเซิร์ฟเวอร์คืออะไร?
Mohammed Zameer

2
@BountyMan - เซิร์ฟเวอร์บิลด์เป็นเซิร์ฟเวอร์ที่รับรองหรือควบคุมการสร้างการรวมต่อเนื่อง (CI) ของซอฟต์แวร์ ตัวอย่าง: เจนกินส์, TeamCity, CruiseControl, ฯลฯ
Matthew Skelton

3
โชคไม่ดีที่มี VS v14.0 วิธีการติดตั้งแพ็กเกจคือผ่าน nuget แต่เนื่องจากปัญหาของฉันคือการที่เซิร์ฟเวอร์การสร้างไม่ได้ติดตั้ง VS (เฉพาะ MSBuild) การติดตั้งแพคเกจพิสูจน์แล้วว่าเป็นไปไม่ได้ ฉันใช้เวลาหลายชั่วโมงในการคลำหา PowerShell และการติดตั้ง Nuget ที่สำรองข้อมูลไว้ครึ่งหนึ่งก่อนที่จะคัดลอกโฟลเดอร์จากพีซีไปยังเซิร์ฟเวอร์
pasx

1
@pasx หากข้อความแสดงข้อผิดพลาดมี "v14" คุณสามารถติดตั้ง Visual Studio 2015 Isolated Shell แทนทำงานให้ฉัน - visualstudioextensibility.com/downloads/vs-shells (ภายใต้ "ดาวน์โหลด URL" มีการสำรวจภาคบังคับสนุก!)
Dunc

38

SDK ล่าสุดของ Windows ดังกล่าวข้างต้นนอกเหนือจาก"Microsoft Visual Studio 2010 Shell (รวม) แพ็คเกจที่แจกจ่ายต่อได้"สำหรับ Microsoft.WebApplication.targets และ"Microsoft Visual Studio Team System 2008 ฐานข้อมูล Edition GDR R2"สำหรับ Microsoft.Data.Schema .SqlTasks.targets ควรลดความจำเป็นในการติดตั้ง Visual Studio 2010 อย่างไรก็ตามการติดตั้ง VS 2010 อาจโดยรวมน้อยกว่าในการดาวน์โหลดและใช้งานได้น้อยกว่าในที่สุด


FYI - หากคุณกำลังพยายามสร้างโครงการ Sql บนบิลด์เซิร์ฟเวอร์โดยไม่ต้องติดตั้ง VS แบบเต็มแสดงว่าคุณโชคไม่ดีนักด้วยการติดตั้ง Team System 2008 Database Edition GDR R2 ที่กล่าวถึงที่นี่ pre-reqs คือ Visual Studio Team System 2008 ฐานข้อมูล Edition SP1 (อังกฤษ) หรือ Visual Studio Team System 2008 Suite SP1 (อังกฤษ) และ Visual Studio 2008 Service Pack 1 ดูเหมือนว่าอย่างไรก็ตามคุณสามารถคัดลอก SqlServer.targets ออกจาก. NET Framework \ ไดเรกทอรี v4 และไฟล์เป้าหมาย TeamData msbuild ออกจาก \ program files \ msbuild \ microsoft \ visual studio \ v10.0 \ และ csprojs ของคุณจะสร้างขึ้น
อีธานเจบราวน์มี. ค.

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

21
นี่เป็นคำตอบที่สำคัญมากเพราะหากคุณเป็นผู้พัฒนาอิสระตั้งค่าเซิร์ฟเวอร์สำหรับลูกค้าคุณไม่ต้องการให้ลูกค้าต้องรักษาลิขสิทธิ์ Visual Studio เพื่อให้สามารถสร้างซอฟต์แวร์ได้
thelsdj

ฉันต้องการเฉพาะแพ็คเกจ VS2010 แบบรวมเชลล์และ EntLib 5 เพื่อรับของฉันเพื่อสร้าง ไม่ต้องการระบบทีม
Robin Winslow

1
VS 2010 Shell ไม่สามารถใช้งานได้อีกต่อไปที่ลิงก์ "ทรัพยากรที่คุณต้องการถูกลบออกมีการเปลี่ยนแปลงชื่อหรือไม่สามารถใช้งานได้ชั่วคราว"
kristianp

22

เพิ่มการพึ่งพาผ่าน NuGet และตั้งค่าพารามิเตอร์สร้าง

เป้าหมาย: ไม่มีการเปลี่ยนแปลง / ติดตั้งที่จำเป็นสำหรับตัวแทนการสร้าง

ฉันใช้วิธีผสมผสานกับแนวทางของNuGet โดย Lloyd ที่นี่ซึ่งมีพื้นฐานมาจากการอ้างอิงไบนารีของ Andrik

สาเหตุที่ฉันต้องการเพิ่มตัวแทนการสร้างใหม่โดยไม่ต้องกำหนดค่าล่วงหน้าด้วยรายการเช่นนี้

  1. บนเครื่องที่มี Visual Studio ให้เปิดโซลูชัน ไม่สนใจว่าโครงการเว็บล้มเหลว
  2. ในตัวจัดการแพคเกจ NuGet เพิ่มMSBuild.Microsoft.VisualStudio.Web.targetsตามที่ Lloyd กล่าว
  3. สิ่งนี้จะแก้ไขไบนารีให้ [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. คุณสามารถคัดลอกสิ่งเหล่านี้ไปยังโฟลเดอร์อ้างอิง & กระทำ
    2. หรือเพียงแค่ใช้พวกเขาอยู่ที่ไหน ฉันเลือกสิ่งนี้ แต่ฉันจะต้องจัดการกับหมายเลขเวอร์ชันในเส้นทางในภายหลัง

ในเวอร์ชัน 7 ฉันทำสิ่งต่อไปนี้ สิ่งนี้อาจไม่จำเป็นและตามความเห็นก็ไม่จำเป็นในตอนนี้ โปรดดูความคิดเห็นด้านล่าง

  1. ถัดไปในการกำหนดค่าการสร้าง TeamCity ของคุณเพิ่มการสร้างพารามิเตอร์สำหรับenv.VSToolsPathและตั้งค่าเป็นโฟลเดอร์ VSToolsPath ฉันใช้..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

8
ไม่จำเป็นต้องทำขั้นตอนที่ 4 หากคุณเพียงแค่แทนที่องค์ประกอบ <Import> ในไฟล์โครงการของคุณด้วยสิ่งนี้:<Import Project="..\..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />
knocte

นี่ควรเป็นคำตอบที่ยอมรับ ... และควรลบจุดที่ 4
อิซซี่

@Izzy ขอบคุณคุณแสดงความคิดเห็นตามที่ knocte ระบุแทนหรือไม่? ฉันไม่ได้ใช้ TC ในช่วงไม่กี่ปีที่ผ่านมาเวอร์ชัน 7 iirc
Damon

@Damon ฉันใช้ Jenkins และไม่ใช่ TC ดังนั้นอาจเป็นเหตุผลว่าทำไมฉันไม่ต้องการจุดสุดท้ายของคุณ
อิซซี่

21

เมื่อสร้างบนเซิร์ฟเวอร์สร้าง / CI ปิดการนำเข้าของทั้งหมดโดยการระบุMicrosoft.WebApplication.targets /p:VSToolsPath=''โดยพื้นฐานแล้วสิ่งนี้จะทำให้เงื่อนไขของบรรทัดต่อไปนี้เป็นเท็จ:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />


นี่เป็นวิธีที่ทำได้ใน TeamCity:

ป้อนคำอธิบายรูปภาพที่นี่


เป้าหมายการสร้างมีความจำเป็นหากคุณใช้กลไก "เผยแพร่" ของ Visual Studio การทำเช่นนี้ทำให้การรวบรวมสามารถดำเนินการต่อและเสร็จสิ้น แต่อาจไม่สมบูรณ์
starlocke

14

หากคุณโอนย้าย Visual Studio 2012 เป็น 2013 ให้เปิดไฟล์โครงการ * .csproj ด้วย edior
และตรวจสอบองค์ประกอบ ToolsVersion ของแท็ก 'โครงการ'

เปลี่ยนค่าจาก 4.0 เป็น 12.0

  • จาก

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" ...
  • ถึง

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" ...

หรือถ้าคุณสร้างด้วย msbuild ให้ระบุคุณสมบัติ VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0

แหล่งที่มาของโซลูชัน


4
การเพิ่ม /p:VisualStudioVersion=12.0 ไปยังข้อโต้แย้ง MSBuild ในนิยามการสร้าง TFS 2013 (สำหรับโซลูชันที่สร้างใน Visual Studio 2013) ได้ผลสำหรับฉัน ด้วยเหตุผลบางอย่างมันจะค้นหาไฟล์ในโฟลเดอร์ v11.0 โดยไม่มีพารามิเตอร์ใด ๆ
Sacha K

3
วิธีนี้ใช้ได้ผลสำหรับฉันฉันใช้คำสั่งนั้น:msbuild /p:Platform=x86 /p:VisualStudioVersion=12.0
E.Meir

9

ดูเหมือนว่า msbuild เวอร์ชันใหม่จะไม่มาพร้อมกับ Microsoft.WebApplication.targets ในการแก้ไขคุณต้องอัปเดตไฟล์ csproj ของคุณดังนี้:

1) แก้ไขเว็บแอป csproj (คลิกขวา) ค้นหาส่วนใน csproj ทางด้านล่างเกี่ยวกับเครื่องมือสร้าง ควรมีลักษณะเช่นนั้น

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) คุณต้องเพิ่ม VSToolsPath หนึ่งบรรทัดใต้แท็ก VisualStudioVersion ดังนั้นจึงเป็นเช่นนั้น

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

ลิงค์อ้างอิง: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/


8

นี่คือทั้งหมดที่คุณต้องการ 103MB เท่านั้น อย่าติดตั้งทุกอย่าง

ป้อนคำอธิบายรูปภาพที่นี่


ฉันจะใส่เครื่องหมายถูกลงในแบบฟอร์มนั้นได้โดยไม่ต้องติดตั้งอะไรเลย?
คริสเตียน

5

ฉันพบสิ่งนี้ในMS connect :

ใช่คุณต้องติดตั้ง Visual Studio 2010 บนเครื่องสร้างเพื่อสร้างโครงการฐานข้อมูล การทำเช่นนั้นไม่จำเป็นต้องมีลิขสิทธิ์เพิ่มเติมของ Visual Studio

ดังนั้นนี่เป็นตัวเลือกเดียวที่ฉันมีในตอนนี้


2
ดูเหมือนว่าลิงก์จะใช้งานไม่ได้
ไม่แยแส

2

โซลูชันของฉันคือการผสมผสานคำตอบหลายข้อที่นี่

ฉันตรวจสอบการสร้างเซิร์ฟเวอร์และติดตั้ง Windows7 / NET4.0 SDK แล้วดังนั้นฉันจึงค้นหาเส้นทาง:

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`

อย่างไรก็ตามในบรรทัดนี้:

<นำเข้าโครงการ = "$ (MSBuildExtensionsPath) \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets" />

$ (MSBuildExtensionsPath)ขยายเป็นC: \ Program Files \ MSBuildซึ่งไม่มีเส้นทาง

ดังนั้นสิ่งที่ฉันทำคือการสร้าง symlink โดยใช้คำสั่งนี้:

mklink / J "Files \ MSBuild \ Microsoft \ VisualStudio" C: \ Program "" C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio "

วิธีนี้ $ (MSBuildExtensionsPath) จะขยายไปยังพา ธ ที่ถูกต้องและไม่จำเป็นต้องทำการเปลี่ยนแปลงในแอปเองในเซิร์ฟเวอร์การสร้างเท่านั้น (อาจสร้าง symlink ทุกครั้งที่สร้างเพื่อให้แน่ใจว่าขั้นตอนนี้จะไม่สูญหายและเป็นเอกสาร ")


2

ฉันแก้ไขสิ่งนี้โดยการเพิ่ม
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

เข้าไป
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments


2

ฉันลองใช้วิธีแก้ปัญหามากมาย แต่ท้ายที่สุดคำตอบนี้ใช้ได้สำหรับฉัน: https://stackoverflow.com/a/19826448/431522

โดยทั่วไปแล้วจะหมายถึงการเรียก MSBuild จากไดเรกทอรี MSBuild แทนที่จะเป็นไดเรกทอรี Visual Studio

ฉันยังเพิ่มไดเรกทอรี MSBuild ไปยังเส้นทางของฉันเพื่อให้สคริปต์เขียนโค้ดได้ง่ายขึ้น


2

ทุกคนที่มาที่นี่สำหรับ Visual Studio 2017 ฉันมีปัญหาที่คล้ายกันและไม่สามารถรวบรวมโครงการหลังจากอัปเดตเป็น 15.6.1 ฉันต้องติดตั้งเครื่องมือ MSBulild แต่ก็ยังมีข้อผิดพลาดอยู่ที่นั่น

ฉันสามารถแก้ไขปัญหาได้โดยการคัดลอกv14.0โฟลเดอร์C:\Program Files (x86)\MSBuild\Microsoft\VisualStudioไปยังโฟลเดอร์เดียวกันv15.0และแก้ไขข้อผิดพลาดทั้งหมด ดังนั้นตอนนี้โครงสร้างโฟลเดอร์ของฉันดูเหมือนด้านล่างซึ่งทั้งสองโฟลเดอร์มีเนื้อหาเหมือนกัน

ป้อนคำอธิบายรูปภาพที่นี่


2

หากคุณใช้ MSBuild เช่นเดียวกับในกรณีของการสร้างเซิร์ฟเวอร์สิ่งที่ได้ผลสำหรับฉันก็คือ:

เปลี่ยนสิ่งต่อไปนี้:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

ถึง:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

คำสั่ง Msbuild ของฉันคือ: *"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

หวังว่านี่จะช่วยใครซักคน


สำหรับการกล่าวถึงการเปลี่ยนแปลงควรทำกับไฟล์. csproj, vbproj ที่ละเมิด
โคลิน Q

0

ในกรณีที่คุณกำลังพยายามปรับใช้โครงการโดยใช้ VSTS ปัญหาอาจเชื่อมต่อกับการตรวจสอบตัวเลือก "โฮสต์ Windows Container" แทน "Hosted VS2017" (หรือ 18 เป็นต้น):

ป้อนคำอธิบายรูปภาพที่นี่


0
  • หลังจากติดตั้งเครื่องมือ MSBuild จาก Microsoft ให้กำหนดเส้นทาง MSBuild ในตัวแปรสภาพแวดล้อมเพื่อให้สามารถเรียกใช้จากเส้นทางใดก็ได้
  • แก้ไขไฟล์. csproj ในโปรแกรมแก้ไขโน้ตแพดใด ๆ เช่น notepad ++ และแสดงความคิดเห็น
  • ตรวจสอบองค์ประกอบต่อไปนี้ ->
    • ตรวจสอบให้แน่ใจว่าคุณใช้การนำเข้าเพียงครั้งเดียวเลือกว่าอะไรทำงาน
    • ตรวจสอบให้แน่ใจว่าคุณมีโฟลเดอร์ต่อไปนี้อยู่บนไดรฟ์ "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0" หรือเวอร์ชันใดที่อ้างอิงโดย MSBuild เป้าหมายที่ "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications \ Microsoft.WebApplication.targets"
    • จากพรอมต์คำสั่งเรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ

C:> msbuild "C: \\ DotnetCi.sln" / p: การกำหนดค่า = Release / p: UseWPP_CopyWebApplication = true / p: PipelineDependsOnBuild = false


0

ฉันมีปัญหานี้ในการสร้างโครงการ SQL Server บน CI / CD ไปป์ไลน์ อันที่จริงฉันมีมันในพื้นที่เช่นกันและฉันก็ไม่สามารถแก้ไขมันได้

สิ่งที่ใช้ได้ผลสำหรับฉันคือการใช้MSBuild SDKซึ่งสามารถสร้างแพ็คเกจ SQL Server Data-Tier Application ( .dacpac) จากชุดของสคริปต์ SQL ซึ่งหมายถึงการสร้างโครงการใหม่ แต่ฉันต้องการเก็บโครงการ SQL Server เพื่อให้ฉันสามารถเชื่อมโยงกับฐานข้อมูลสดผ่าน SQL Server Object Explorer บน Visual Studio ฉันทำตามขั้นตอนต่อไปนี้เพื่อให้ทำงานได้:

  1. รักษาโครงการ SQL Server ของฉันด้วย .sqlสคริปต์ฐานข้อมูล
  2. สร้างโครงการไลบรารีคลาส. NET Standard 2.0 ตรวจสอบให้แน่ใจว่ากรอบงานเป้าหมายคือ. NET Standard 2.0 ตามแนวทางในลิงค์ด้านบน
  3. ตั้งเนื้อหาของ.csprojดังต่อไปนี้:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0">
      <PropertyGroup>
        <SqlServerVersion>Sql140</SqlServerVersion>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    </Project>
  4. ฉันเลือก Sql140 เป็นรุ่น SQL Server เพราะฉันใช้ SQL Server 2019 ตรวจสอบคำตอบนี้เพื่อค้นหาการจับคู่กับรุ่นที่คุณใช้งานอยู่

  5. เพิกเฉยโครงการ SQL Server ที่บิลด์เพื่อหยุดการโลคัล (มันสร้างบน Visual Studio แต่ล้มเหลวใน VS Code)

  6. ตอนนี้เราต้องทำให้แน่ใจว่า.sqlไฟล์อยู่ในโครงการ SDK เมื่อสร้างขึ้น ฉันประสบความสำเร็จด้วยการทำ PowerShell อย่างง่ายบน CI / CD ไปป์ไลน์ที่จะคัดลอกไฟล์จากโครงการ SQL Server ไปยังโครงการ SDK:

คัดลอกรายการ - พา ธ "Path.To.The.Database.Project \ dbo \ Tables \ *" -Destination (รายการใหม่ - ชื่อ "dbo \ Tables" - ประเภทไดเรกทอรี -Path "พา ธ ไปยังฐานข้อมูล SDK.Project \ ")

PS: ไฟล์จะต้องมีอยู่จริงในโครงการ SDK ทั้งในรูทหรือในบางโฟลเดอร์ดังนั้นลิงก์ไปยัง.sdkไฟล์ในโครงการ SQL Server จะไม่ทำงาน ในทางทฤษฎีแล้วมันเป็นไปได้ที่จะคัดลอกไฟล์เหล่านี้โดยมีเงื่อนไขก่อนสร้าง แต่ด้วยเหตุผลบางอย่างที่คลุมเครือนี่ไม่ได้ผลสำหรับฉัน ฉันพยายามที่จะมี.sqlไฟล์ในโครงการ SDK และเชื่อมโยงไปยังโครงการ SQL Server แต่นั่นจะทำให้การเชื่อมโยงกับ SQL Server Object Explorer เป็นไปอย่างง่ายดายดังนั้นฉันจึงตัดสินใจทิ้งสิ่งนี้เช่นกัน

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