MSBUILD: lỗi MSB1008: Chỉ có thể chỉ định một dự án


116

Tại sao tôi gặp lỗi Bản dựng sau?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: Publishing / p: Configuration = Release / p: Platform = AnyCPU / v: detail / p: PublishDir = "\\ BSIIS3 \ c $ \ DATA \ WEBSITES \ benesys.net \ benesys.net \ TotalEscapeTest \" /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 Phiên bản 3.5.30729.1
[Microsoft .NET Framework, Phiên bản 2.0.50727.3603]
Bản quyền (C) Microsoft Corporation 2007. Mọi quyền được bảo lưu.

MSBUILD: lỗi MSB1008: Chỉ có thể chỉ định một dự án.
Chuyển đổi: Giáo dục

Đối với cú pháp chuyển đổi, hãy nhập "MSBuild / help"

Tôi không thấy dự án thứ hai đang được chỉ định như thế nào.
Nó có được lưu trữ trong một tệp dự án ở đâu đó không?


4
Lệnh rất giống nhau làm việc trong PowerShell nhưng không phải trong cmd.exe ... trông giống như bạn đang đánh một nhân vật sequance đâu đó spacial ...
Cédric Rup

Câu trả lời:


135

Hóa ra dấu gạch chéo trong thuộc tính PublishDir đang thoát khỏi dấu ngoặc kép. Thoát khỏi dấu gạch chéo đã giải quyết được vấn đề của tôi.

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

Bằng cách này, chúng ta có thể sử dụng dấu ngoặc kép cho các đường dẫn có khoảng trắng trong các thuộc tính mà MSBuild yêu cầu dấu gạch chéo.

Tôi biết đây là một bài viết cũ, nhưng tôi cảm thấy mình cần chia sẻ điều này với ai đó :-)


45

GIẢI PHÁP
Xóa các trích dẫn xung quanh cài đặt / p: PublishDir

tức là
Thay vì dấu ngoặc kép

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

Không sử dụng dấu ngoặc kép

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

Tôi xin lỗi vì tôi đã không đăng phát hiện của mình sớm hơn. Tôi thực sự đã phải nghiên cứu lại để xem điều gì cần phải thay đổi. Ai có thể nghĩ rằng việc xóa dấu ngoặc kép sẽ có hiệu quả? Tôi phát hiện ra điều này khi xem một đồng nghiệp xây dựng giải pháp khác và nhận thấy nó không có dấu ngoặc kép.


2
Điều này rất lạ. Trong trường hợp của tôi, tôi gặp lỗi tương tự nhưng vấn đề là tôi có một đường dẫn chưa được trích dẫn với một khoảng trắng trong đó. Thêm dấu ngoặc kép đã khắc phục sự cố.
Mark Arnott

Tôi đã gặp vấn đề tương tự như @MarkArnott, nó không hoạt động với dấu cách hoặc dấu cách thoát, nhưng trích dẫn thì có.
Zitrax

7
Có thể dấu gạch chéo ngược cuối cùng trong đường dẫn của bạn là thoát khỏi dấu ngoặc kép đóng. Nếu đúng, thì bạn không cần xóa dấu ngoặc kép, nhưng thay vào đó, bạn cần loại bỏ dấu gạch chéo ngược.
Carl G

2
Hãy nhớ rằng, các khoảng trống trong thư mục đường dẫn đến nhu cầu được thoát hoặc đã được đặt bên trong một dấu ngoặc kép
OK999

30

Trên Git Bash, tôi phải chỉ định các tham số bằng dấu gạch chéo kép như:

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

27

Sự cố này xuất hiện khi bạn có một đường dẫn hoặc một thuộc tính chứa một khoảng trắng và không được trích dẫn.

Tất cả các thuộc tính và đường dẫn của bạn đều có trích dẫn xung quanh chúng, thật kỳ lạ. Thông báo lỗi cho biết Educationdưới dạng công tắc, hãy thử gỡ bỏ /p:ProductName="Total Education TEST"để xem nó có hoạt động không.


4
Tránh Space trong đường dẫn thư mục để loại bỏ vấn đề này.
Gopinath

1
@Julien Hoarau: Tôi đã thử 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. Nó cho tôi một lỗi MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Vấn đề có thể là gì?
Nevin Raj Victor

@NevinRajVictor Đã muộn rất nhiều, nhưng có lẽ bạn nên đặt dấu ngoặc képDefault WebSite/New
Anderson Pimentel

11

Bạn cần đặt qoutes xung quanh đường dẫn và tên tệp.
Vì vậy, hãy sử dụng MSBuild "C: \ Path Name \ File Name.Exe" / [Options]


4

Cố gắng xóa dấu gạch chéo ngược hoặc dấu gạch chéo ở cuối đường dẫn xuất bản và url cài đặt của bạn

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

Chắc hẳn bạn đã nhấn một chuỗi ký tự đặc biệt với \ "và (hoặc) /", nhưng tôi không biết đủ trong cmd.exe để tìm ra.

Tôi cá nhân luôn sử dụng Powershell: nó thân thiện và mạnh mẽ hơn!

Hy vọng nó giúp!


3

Trong vs2012, chỉ cần cố gắng tạo định nghĩa Bản dựng "Bản dựng thử nghiệm" bằng cách sử dụng mẫu TFS mặc định "DefaultTemplate .... xaml" (thường là bản sao của nó)

Nó sẽ không thành công với lỗi tự giải thích thông thường: "MSBUILD: error MSB1008: Chỉ có thể chỉ định một dự án. Chuyển đổi: Hoạt động"

Tất nhiên ở đâu đó trong mẫu TFS mặc định "bị thiếu một số vì vậy msbuild sẽ nhận dưới dạng tham số là một thư mục không thoát có chứa khoảng trắng, do đó sẽ dẫn đến nhiều dự án (?!)

Vì vậy, KHÔNG BAO GIỜ sử dụng khoảng trắng trong tên Định nghĩa Xây dựng TFS của bạn, khá buồn và đơn giản cùng một lúc


1
Câu trả lời này có thể sử dụng một số thu dọn. Rất khó theo dõi.
theMayer

1
Lưu ý về việc Không bao giờ sử dụng khoảng cách trong tên Định nghĩa bản dựng TFS của bạn là một điều tốt! Điều này đã khiến tôi nhiều lần quan tâm.
Valentein

3

Tôi đã sử dụng dấu ngoặc kép xung quanh tham số mật khẩu khi tôi gặp lỗi

/p:password='my secret' xấu

và thay đổi nó để sử dụng dấu ngoặc kép để giải quyết vấn đề.

/p:password="my secret" tốt

Có thể điều tương tự cũng sẽ áp dụng cho bất kỳ tham số nào cần dấu ngoặc kép cho các giá trị chứa khoảng trắng.


3

Đối với tôi, tôi đã quên thêm câu kết

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

đến

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


Tôi cũng đã thiếu đóng dấu ngoặc kép.
habib

2

Dành cho độc giả trong tương lai.

Tôi gặp lỗi này vì tệp LOG được chỉ định của tôi có khoảng trống trong đó:

TRƯỚC:

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

SAU: (đã giải quyết nó)

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

2

Tuy nhiên, một nguyên nhân và giải pháp khác cho vấn đề này: Kiểm tra xem bạn đã không đặt dấu cách sai chỗ, tức là trong các tham số; của tôi là dotnet -c Release - o /home/some/path(lưu ý khoảng trống giữa -o), tôi tiếp tục nhìn vào chính con đường, nó chính xác và ném tôi đi. Hy vọng rằng sẽ giúp! (điều này đã có trong Bash mặc dù nó cũng sẽ áp dụng cho Windows)


1

Điều này đã làm việc cho tôi trong TFS MSBuild Argument. Lưu ý số lượng gạch chéo.

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


1

Nếu bạn sử dụng không gian làm việc mặc định trong Jenkins, điều này có thể xảy ra. Sử dụng vị trí không gian làm việc tùy chỉnh mà không có bất kỳ khoảng trống nào.

nhập mô tả hình ảnh ở đây


1

Nếu bạn đang sử dụng MSBuildtác vụ Azure DevOps , lỗi có thể do cờ cấu hình kép gây ra. Hãy đảm bảo rằng bạn đặt $(BuildConfiguration)vào hộp được chỉ định thay vì hộp MSBuild Arguments: nhập mô tả hình ảnh ở đây


1

Nếu bạn đang sử dụng, Any CPUbạn có thể cần phải đặt nó trong dấu ngoặc kép.

Chắc chắn khi chạy trong Dockerfile, tôi phải sử dụng các dấu ngoặc kép:

# 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

Đề phòng trường hợp ai đó có cùng vấn đề với tôi, tôi đã thiếu "/" trước một trong các đối số "/ p". Không rõ ràng lắm từ mô tả. Tôi hi vọng điêu nay se giup được ai đo.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.