MSBUILD: error MSB1008: สามารถระบุโปรเจ็กต์เดียวเท่านั้น


116

เหตุใดฉันจึงได้รับข้อผิดพลาด Build ต่อไปนี้

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: published / p: Configuration = Release / p: Platform = AnyCPU / v: detail / p: PublishDir = "\\ BSIIS3 \ c $ \ DATA \ WEBSITES \ benesys.net \ benesys.net \ TotalEducationTest \" /p:InstallUrl="https://www.benesys.net/benesys.net/TotalEducationTest/ "/p:ApplicationVersion=1.0.1.198 / p: ProductName =" Total Education TEST "/ p: PublisherName =" BeneSys, Inc. " / p: UpdateRequired = "True" /p:MinimumRequiredVersion=1.0.1.198
Microsoft (R) Build Engine เวอร์ชัน 3.5.30729.1
[Microsoft .NET Framework รุ่น 2.0.50727.3603]
ลิขสิทธิ์ (C) Microsoft Corporation 2007 สงวนลิขสิทธิ์

MSBUILD: error MSB1008: สามารถระบุโปรเจ็กต์เดียวเท่านั้น
สวิตช์: การศึกษา

สำหรับไวยากรณ์ของสวิตช์ให้พิมพ์ "MSBuild / help"

ฉันไม่เห็นว่ามีการระบุโครงการที่สองอย่างไร
เก็บไว้ในไฟล์โครงการที่ไหนสักแห่ง?


4
คำสั่งเดียวกันทำงานใน powershell แต่ไม่ใช่ใน cmd.exe ... ดูเหมือนว่าคุณกำลังกดปุ่มลำดับอักขระเว้นวรรคที่ไหนสักแห่ง ...
Cédric Rup

คำตอบ:


135

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

/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\\"

วิธีนี้เราสามารถใช้เครื่องหมายคำพูดสำหรับเส้นทางที่มีช่องว่างในคุณสมบัติที่ MSBuild ต้องการเครื่องหมายทับ

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันรู้สึกว่าฉันต้องการแบ่งปันสิ่งนี้กับใครบางคน :-)


45

วิธีแก้ไข
ลบคำพูดรอบ ๆ การตั้งค่า / p: PublishDir

เช่น
แทนคำพูด

/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\"  

ไม่ใช้เครื่องหมายคำพูด

/p:PublishDir=\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\  

ฉันขอโทษที่ไม่ได้โพสต์การค้นพบของฉันเร็วกว่านี้ จริงๆแล้วฉันต้องค้นคว้าอีกครั้งเพื่อดูว่าต้องเปลี่ยนแปลงอะไรบ้าง ใครจะคิดว่าการลบเครื่องหมายคำพูดจะได้ผล? ฉันค้นพบสิ่งนี้เมื่อดูเพื่อนร่วมงานสร้างโซลูชันอื่นและสังเกตว่าไม่มีเครื่องหมายคำพูด


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

ฉันมีปัญหาเดียวกันกับ @MarkArnott มันใช้ไม่ได้กับช่องว่างหรือช่องว่างที่หลีกเลี่ยง แต่การอ้างถึงทำได้
Zitrax

7
อาจเป็นไปได้ว่าแบ็กสแลชสุดท้ายในเส้นทางของคุณกำลังหนีเครื่องหมายอัญประกาศปิด หากถูกต้องคุณก็ไม่จำเป็นต้องลบเครื่องหมายคำพูดคู่ แต่คุณจะต้องหนีเครื่องหมายแบ็กสแลชแทน
Carl G

2
โปรดจำไว้ว่าช่องว่างใน dir path จำเป็นต้องมีการหลีกเลี่ยงหรือต้องอยู่ในเครื่องหมายคำพูดคู่
OK999

31

ใน Git Bash ฉันต้องระบุพารามิเตอร์ด้วยเครื่องหมายทับคู่เช่น:

MSBuild.exe "Path\to\Solution.sln" //p:Platform="x86" //p:Configuration=Release //p:AppxBundlePlatforms="x86" 

27

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

คุณสมบัติและเส้นทางทั้งหมดของคุณมีคำพูดรอบตัวมันแปลกมาก ข้อความแสดงข้อผิดพลาดระบุEducationว่าเป็นสวิตช์ให้ลองลบออก/p:ProductName="Total Education TEST"เพื่อดูว่าใช้งานได้หรือไม่


4
หลีกเลี่ยงช่องว่างในเส้นทางโฟลเดอร์เพื่อกำจัดปัญหานี้
Gopinath

1
@ Julien Hoarau: ฉันพยายามMSBuild.exe C:\BuildAgent\work\4c7b8ac8bc7d723e\WebService.sln /p:Configuration=Release /p:OutputPath=bin /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://204.158.674.5/msdeploy.axd /p:username=Admin /p:password=Password#321 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Default WebSite/New /p:MSDeployPublishMethod=WMSVCแล้ว MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/Newมันทำให้ฉันมีข้อผิดพลาด สิ่งที่อาจเป็นปัญหา?
Nevin Raj Victor

@NevinRajVictor ดึกมาก แต่คุณควรใส่คำพูดไว้รอบ ๆDefault WebSite/New
Anderson Pimentel

11

คุณต้องใส่ qoutes รอบ ๆ เส้นทางและชื่อไฟล์
ให้ใช้ MSBuild "C: \ Path Name \ File Name.Exe" / [Options]


4

พยายามลบแบ็กสแลชต่อท้ายหรือสแลชที่ท้ายของคุณเผยแพร่พา ธ และติดตั้ง url

/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest"
/p:InstallUrl="https://www.benesys.net/benesys.net/TotalEducationTest"

คุณต้องตีลำดับอักขระพิเศษด้วย \ "และ (หรือ) /" แต่ฉันไม่ทราบว่า cmd.exe เพียงพอที่จะหาได้

ฉันใช้ Powershell เสมอ: เป็นวิธีที่เป็นมิตรและทรงพลังมากขึ้น!

หวังว่าจะช่วยได้!


3

ใน vs2012 ให้ลองสร้างคำจำกัดความของ Build "Test Build" โดยใช้เทมเพลต TFS เริ่มต้น "DefaultTemplate .... xaml" (โดยปกติจะเป็นสำเนา)

มันจะล้มเหลวด้วยข้อผิดพลาดที่อธิบายตัวเองตามปกติ: "MSBUILD: error MSB1008: สามารถระบุได้เพียงโปรเจ็กต์เดียวเท่านั้น Switch: Activities"

นอกหลักสูตรบางแห่งในเทมเพลต TFS เริ่มต้นบางส่วน"ขาดหายไปดังนั้น msbuild จะได้รับเป็นพารามิเตอร์ไดเรกทอรีที่ไม่ใช้ Escape ซึ่งมีช่องว่างดังนั้นจะส่งผลให้เกิดหลายโครงการ (?!)

ดังนั้นอย่าใช้ช่องว่างในชื่อ TFS Build Definition ของคุณค่อนข้างเศร้าและเรียบง่ายในเวลาเดียวกัน


1
คำตอบนี้สามารถใช้การจัดระเบียบบางอย่างได้ ทำตามได้ยากมาก
theMayer

1
ประเด็นเกี่ยวกับการไม่ใช้เว้นวรรคในชื่อ TFS Build Definition เป็นสิ่งที่ดี! สิ่งนี้ติดตาฉันหลายครั้ง
Valentein

3

ฉันใช้เครื่องหมายคำพูดเดี่ยวรอบพารามิเตอร์รหัสผ่านเมื่อฉันได้รับข้อผิดพลาด

/p:password='my secret' ไม่ดี

และเปลี่ยนเป็นการใช้เครื่องหมายคำพูดคู่เพื่อแก้ไขปัญหา

/p:password="my secret" ดี

ดูเหมือนว่าจะใช้กับพารามิเตอร์ใด ๆ ที่ต้องการเครื่องหมายคำพูดสำหรับค่าที่มีช่องว่าง


3

สำหรับฉันฉันลืมใส่คำพูดปิดท้าย

/p:DeployOnBuild=true;OutDir="$(build.artifactstagingdirectory)

ถึง

/p:DeployOnBuild=true;OutDir="$(build.artifactstagingdirectory)"


ฉันยังพลาดการปิดเครื่องหมายคำพูดคู่
habib

2

สำหรับผู้อ่านในอนาคต.

ฉันได้รับข้อผิดพลาดนี้เนื่องจากไฟล์ LOG ที่ระบุของฉันมีช่องว่างอยู่:

ก่อน:

/l:FileLogger,Microsoft.Build.Engine;logfile=c:\Folder With Spaces\My_Log.log

After: (ซึ่งแก้ไขได้)

/l:FileLogger,Microsoft.Build.Engine;logfile="c:\Folder With Spaces\My_Log.log"

2

อีกสาเหตุหนึ่งและวิธีแก้ปัญหานี้: ตรวจสอบว่าคุณไม่ได้ใส่ช่องว่างผิดตำแหน่งเช่นในพารามิเตอร์ ของฉันคือdotnet -c Release - o /home/some/path(สังเกตช่องว่างระหว่าง-และo) ฉันมองไปที่เส้นทางนั้นเองซึ่งถูกต้องและโยนฉันออกไป หวังว่าจะช่วยได้! (สิ่งนี้อยู่ใน Bash แม้ว่าควรใช้กับ Windows ด้วย)


1

สิ่งนี้ใช้ได้ผลสำหรับฉันใน TFS MSBuild Argument สังเกตจำนวนเครื่องหมายทับ

/ p: DefaultPackageOutputDir = "\\ Rdevnet \ Visual Studio Projects \ Insurance \"


1

หากคุณใช้พื้นที่ทำงานเริ่มต้นใน Jenkins สิ่งนี้อาจเกิดขึ้น ใช้ตำแหน่งพื้นที่ทำงานแบบกำหนดเองโดยไม่มีช่องว่าง

ใส่คำอธิบายภาพที่นี่


1

หากคุณกำลังใช้งาน Azure DevOps MSBuildข้อผิดพลาดอาจเกิดจากแฟล็กการกำหนดค่าสองเท่า โปรดตรวจสอบให้แน่ใจว่าคุณได้ใส่$(BuildConfiguration)กล่องที่ระบุไว้แทน MSBuild Arguments one: ใส่คำอธิบายภาพที่นี่


1

หากคุณใช้Any CPUคุณอาจต้องใส่ไว้ในเครื่องหมายคำพูดเดี่ยว

แน่นอนว่าเมื่อทำงานใน Dockerfile ฉันต้องใช้เครื่องหมายคำพูดเดี่ยว:

# Fails. Gives: MSBUILD : error MSB1008: Only one project can be specified.
RUN msbuild ConsoleAppFw451.sln /p:Configuration=Debug /p:Platform="Any CPU" 

# Passes. Gives: Successfully built 40163c3e0121
RUN msbuild ConsoleAppFw451.sln /p:Configuration=Debug /p:Platform='Any CPU' 

0

ในกรณีที่มีคนมีปัญหาเช่นเดียวกับฉันฉันไม่พบ "/" ก่อนอาร์กิวเมนต์ "/ p" รายการใดรายการหนึ่ง ไม่ชัดเจนมากจากคำอธิบาย ฉันหวังว่านี่จะช่วยใครบางคนได้


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