MSBUILD: kesalahan MSB1008: Hanya satu proyek yang dapat ditentukan

116

Mengapa saya mendapatkan kesalahan Build berikut?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: terbitkan / p: Konfigurasi = Rilis / p: Platform = AnyCPU / v: rinci / 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 Versi 3.5.30729.1
[Microsoft .NET Framework, Versi 2.0.50727.3603]
Hak Cipta (C) Microsoft Corporation 2007. Semua hak dilindungi undang-undang.

MSBUILD: kesalahan MSB1008: Hanya satu proyek yang dapat ditentukan.
Beralih: Pendidikan

Untuk sintaks sakelar, ketik "MSBuild / help"

Saya tidak melihat bagaimana proyek kedua ditentukan.
Apakah itu disimpan dalam file proyek di suatu tempat?

Gerhard Weiss
sumber
4
Perintah yang sama bekerja di PowerShell tetapi tidak di cmd.exe ... sepertinya Anda mencapai urutan karakter spasial di suatu tempat ...
Cédric Rup

Jawaban:

135

Ternyata garis miring di properti PublishDir keluar dari kutipan akhir. Melarikan diri dari garis miring memecahkan masalah saya.

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

Dengan cara ini kita dapat menggunakan tanda kutip untuk jalur yang memiliki spasi putih di properti yang MSBuild memerlukan garis miring.

Saya tahu ini adalah postingan lama, tetapi saya merasa perlu membagikan ini dengan seseorang :-)

Matt
sumber
45

SOLUSI
Hapus Kutipan di sekitar / p: pengaturan PublishDir

yaitu
Alih-alih kutipan

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

Jangan gunakan tanda kutip

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

Saya minta maaf karena saya tidak memposting temuan saya lebih awal. Saya sebenarnya harus meneliti lagi untuk melihat apa yang perlu diubah. Siapa yang mengira menghapus kutipan akan berhasil? Saya menemukan ini saat melihat rekan kerja membangun untuk solusi lain dan melihat itu tidak memiliki kutipan.

Gerhard Weiss
sumber
2
Ini sangat aneh. Dalam kasus saya, saya mendapatkan kesalahan yang sama tetapi masalahnya adalah saya memiliki jalur yang tidak dikutip dengan spasi di dalamnya. Menambahkan tanda kutip memperbaiki masalah.
Mark Arnott
Saya memiliki masalah yang sama dengan @MarkArnott, itu tidak berfungsi dengan spasi atau spasi yang lolos, tetapi mengutip berhasil.
Zitrax
7
Mungkin garis miring terbalik terakhir di jalur Anda keluar dari tanda kutip ganda penutup. Jika benar, maka Anda tidak perlu menghapus tanda kutip ganda, tetapi Anda perlu menghindari garis miring terbalik.
Carl G
2
Ingat, spasi di jalur dir perlu
dihilangkan
30

Di Git Bash saya harus menentukan parameter dengan garis miring ganda seperti:

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

Masalah ini muncul saat Anda memiliki jalur atau properti yang berisi spasi dan tidak dikutip.

Semua properti dan jalur Anda memiliki kutipan di sekitarnya, itu aneh. Pesan kesalahan menunjukkan Educationsebagai sakelar, coba hapus /p:ProductName="Total Education TEST"untuk melihat apakah itu berfungsi.

Julien Hoarau
sumber
4
Hindari Space di jalur folder untuk menghilangkan masalah ini.
Gopinath
1
@ Julien Hoarau: Saya sudah mencoba 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. Ini memberi saya kesalahan MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Apa masalahnya?
Nevin Raj Victor
@NevinRajVictor Sangat terlambat, tapi mungkin Anda harus mengutipDefault WebSite/New
Anderson Pimentel
11

Anda perlu meletakkan qoutes di sekitar jalur dan nama file.
Jadi gunakan MSBuild "C: \ Path Name \ File Name.Exe" / [Options]

Zamir
sumber
4

Cobalah untuk menghapus garis miring terbalik atau garis miring di akhir jalur publikasi Anda dan instal url

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

Anda pasti telah mencapai urutan karakter khusus dengan \ "dan (atau) /", tetapi saya tidak cukup tahu tentang cmd.exe untuk mengetahuinya.

Saya pribadi selalu menggunakan Powershell: jauh lebih ramah dan kuat!

Semoga membantu!

Cédric Rup
sumber
3

Di vs2012, coba buat definisi Build "Uji Build" menggunakan template TFS default "DefaultTemplate .... xaml" (biasanya salinannya)

Ini akan gagal dengan kesalahan yang menjelaskan sendiri seperti biasa: "MSBUILD: kesalahan MSB1008: Hanya satu proyek yang dapat ditentukan. Beralih: Aktivitas"

Tentu saja di suatu tempat di template TFS default ada beberapa "yang hilang sehingga msbuild akan menerima sebagai parameter direktori non escaped yang berisi spasi sehingga akan menghasilkan banyak proyek (?!)

Jadi JANGAN PERNAH menggunakan spasi dalam nama TFS Build Definition Anda, cukup menyedihkan dan sederhana pada saat yang bersamaan

pengguna3636264
sumber
1
Jawaban ini perlu dirapikan. Sangat sulit untuk diikuti.
theMayer
1
Poin tentang Jangan pernah menggunakan spasi dalam nama TFS Build Definition Anda adalah bagus! Ini telah menangkap saya beberapa kali.
Valentein pada
3

Saya menggunakan tanda kutip tunggal di sekitar parameter kata sandi ketika saya mendapatkan kesalahan

/p:password='my secret' buruk

dan mengubahnya menjadi menggunakan tanda kutip ganda untuk menyelesaikan masalah.

/p:password="my secret" baik

Hal yang sama mungkin berlaku untuk parameter apa pun yang membutuhkan tanda kutip untuk nilai yang berisi spasi.

John K
sumber
3

Bagi saya, saya lupa menambahkan kutipan penutup

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

untuk

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

Reza
sumber
Saya juga melewatkan tanda kutip ganda penutup.
habib
2

Untuk pembaca selanjutnya.

Saya mendapat kesalahan ini karena file LOG yang saya tentukan memiliki spasi di dalamnya:

SEBELUM:

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

SETELAH: (yang menyelesaikannya)

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

Namun penyebab dan solusi lain untuk ini: Periksa apakah Anda tidak meletakkan spasi di tempat yang salah, misalnya di parameter; milik saya adalah dotnet -c Release - o /home/some/path(perhatikan jarak antara -dan o), saya terus melihat jalan itu sendiri, yang benar dan membuat saya pergi. Semoga membantu! (ini ada di Bash meskipun itu juga harus berlaku untuk Windows)

Christian Rondeau
sumber
1

Ini berhasil untuk saya di TFS MSBuild Argument. Perhatikan jumlah garis miring.

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

Mark Monforti
sumber
1

Jika Anda menggunakan ruang kerja default di Jenkins, ini mungkin terjadi. Gunakan lokasi ruang kerja khusus tanpa spasi.

masukkan deskripsi gambar di sini

pengguna8537391
sumber
1

Jika Anda menggunakan MSBuildtugas Azure DevOps , kesalahan mungkin disebabkan oleh bendera konfigurasi ganda. Harap pastikan Anda memasukkan $(BuildConfiguration)kotak yang ditentukan, bukan MSBuild Arguments: masukkan deskripsi gambar di sini

J. Wincewicz
sumber
1

Jika Anda menggunakan, Any CPUAnda mungkin perlu memasukkannya ke dalam tanda kutip tunggal.

Tentu saja saat menjalankan Dockerfile, saya harus menggunakan tanda kutip tunggal:

# 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' 
Badgerspot
sumber
0

Seandainya seseorang memiliki masalah yang sama dengan saya, saya melewatkan "/" sebelum salah satu argumen "/ p". Tidak terlalu jelas dari deskripsinya. Saya harap ini membantu seseorang.

Johnny
sumber