2010-09-23 15 views
65

Tại sao tôi gặp lỗi Xây dựng sau?MSBUILD: lỗi MSB1008: Chỉ có thể chỉ định một dự án

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Code\EduBenesysNET\EduBenesysNET\EduBenesysNET.vbproj /t:publish /p:Configuration=Release /p:Platform=AnyCPU /v:detailed /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 Version 3.5.30729.1 
[Microsoft .NET Framework, Version 2.0.50727.3603] 
Copyright (C) Microsoft Corporation 2007. All rights reserved. 

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: Education 

For switch syntax, type "MSBuild /help" 

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

+2

Lệnh rất giống tác phẩm 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 spacial ở đâu đó ... –

Trả lời

28

SOLUTION
Tháo Quotes quanh/p: PublishDir thiết

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

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

Sử dụng không có dấu ngoặc kép

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

Tôi xin lỗi tôi đã không đăng tìm kiếm của tôi sớm hơn. Tôi thực sự phải nghiên cứu một lần nữa để xem những gì cần phải thay đổi. Ai có thể nghĩ rằng loại bỏ dấu ngoặc kép sẽ có hiệu quả? Tôi phát hiện ra điều này khi xem đồ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.

+1

Đ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 không được kiểm soát với một khoảng trống trong đó. Thêm dấu ngoặc kép đã khắc phục được sự cố. –

+0

Tôi có cùng một vấn đề với @MarkArnott, nó không hoạt động với không gian hoặc không gian thoát, nhưng trích dẫn đã làm. – Zitrax

+5

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

19

Sự cố này xuất hiện khi bạn có đường dẫn hoặc thuộc tính chứa 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ó dấu ngoặc kép xung quanh, thật lạ. Thông báo lỗi cho biết Education là một công tắc, hãy thử xóa /p:ProductName="Total Education TEST" để xem nó có hoạt động hay không.

+3

Tránh Space trong đường dẫn thư mục để thoát khỏi vấn đề này. – Gopinath

+1

@Julien Hoarau: Tôi đã thử 'MSBuild.exe C: \ BuildAgent \ work \ 4c7b8ac8bc7d723e \ WebService.sln/p: Cấu hình = Phát hành/p: OutputPath = bin/p: DeployOnBuild = True/p: DeployTarget = MSDeployPublish/p: MsDeployServiceUrl = https: //204.158.674.5/msdeploy.axd/p: username = Admin/p: password = Mật khẩu # 321/p: AllowUntrustedCertificate = True/p: DeployIisAppPath = Default WebSite/New/p: MSDeployPublishMethod = WMSVC'. Nó cho tôi một lỗi 'MSBUILD: error MSB1008: Chỉ có thể chỉ định một dự án. Chuyển đổi: WebSite/New'. Điều gì có thể là vấn đề? –

6

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

4

Cố gắng loại bỏ các dấu chéo ngược dấu hoặc giảm vào cuối bạn xuất bản đường dẫn và cài đặt url

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

Bạn phải 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 personnaly luôn sử dụng Powershell: đó là cách thân thiện và mạnh mẽ hơn!

Hy vọng điều đó sẽ hữu ích!

85

Hóa ra dấu gạch chéo sau trong thuộc tính PublishDir là thoát khỏi trích dẫn kết thúc. Thoát dấu gạch chéo theo sau đã 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 tôi có thể sử dụng dấu ngoặc kép cho đường dẫn có khoảng trống trong 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 cũ, nhưng tôi cảm thấy như tôi cần phải chia sẻ điều này với một người nào đó :-)

+0

Cảm ơn bạn đã chia sẻ! Giải quyết vấn đề của tôi! –

+0

Cảm ơn, tôi cũng vậy! – SDK

+0

haha, #minetoo! – TheVillageIdiot

1

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

/p: DefaultPackageOutputDir = "\\ Rdevnet \ Visual Studio Projects \ Bảo hiểm \"

2

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

Nó sẽ thất bại với thông thường tự giải thích lỗi: 'MSBUILD: Lỗi MSB1008: Chỉ có một dự án có thể được specified.Switch: Hoạt động'

Off khóa học ở đâu đó trong mẫu TFS mặc định số thiếu " bị thiếu nên msbuild sẽ nhận được tham số là thư mục không thoát có chứa dấu cách, do đó sẽ dẫn đến nhiều dự án (?!)

Vì vậy, KHÔNG BAO GIỜ sử dụng dấu cách trong bạn TFS Xây dựng Tên có định nghĩa, khá buồn và đơn giản đồng thời

+1

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

+1

Điểm về Không bao giờ sử dụng khoảng cách trong tên TFS Build Definition của bạn là một cái tốt! Điều này đã bắt gặp tôi nhiều lần. – Valentein

1

Tôi đã sử dụng dấu nháy đơn xung quanh mật khẩu tham số khi tôi nhận được 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 đề này.

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

có khả năng tương tự sẽ áp dụng đối với bất kỳ thông số cần trích dẫn cho các giá trị có chứa khoảng trắng.

0

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

0

Đối với tôi, tôi đã quên để thêm đóng quote

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

để

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

-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.

enter image description here

Các vấn đề liên quan