MSBUILD: hata MSB1008: Yalnızca bir proje belirtilebilir


116

Neden aşağıdaki Derleme hatasını alıyorum?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: yayınla / p: Yapılandırma = Yayın / p: Platform = AnyCPU / v: detaylı / 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 =" Toplam Eğitim TESTİ "/ p: PublisherName =" BeneSys, Inc. " / p: UpdateRequired = "True" /p:MinimumRequiredVersion=1.0.1.198
Microsoft (R) Derleme Altyapısı Sürüm 3.5.30729.1
[Microsoft .NET Framework, Sürüm 2.0.50727.3603]
Telif Hakkı (C) Microsoft Corporation 2007. Tüm hakları saklıdır.

MSBUILD: hata MSB1008: Yalnızca bir proje belirtilebilir.
Anahtar: Eğitim

Anahtar sözdizimi için "MSBuild / help" yazın

İkinci bir projenin nasıl belirlendiğini anlamıyorum.
Bir yerde bir proje dosyasında mı saklanıyor?


4
Aynı komut powershell'de çalışıyor, ancak cmd.exe'de değil ... bir yerde uzaysal bir karakter dizisine vuruyormuşsunuz gibi görünüyor ...
Cédric Rup

Yanıtlar:


135

PublishDir özelliğindeki sondaki eğik çizginin son tekliften kaçtığı ortaya çıkıyor. Sondaki eğik çizgiden kaçmak sorunumu çözdü.

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

Bu şekilde, MSBuild'in sondaki eğik çizgiyi gerektirdiği özelliklerde boşluk bulunan yollar için tırnak işaretleri kullanabiliriz.

Bunun eski bir gönderi olduğunu biliyorum ama bunu biriyle paylaşmam gerektiğini hissediyorum :-)


45

ÇÖZÜM
/ p: PublishDir ayarı etrafındaki Alıntıları Kaldır

yani
tırnak yerine

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

Tırnak işareti kullanmayın

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

Üzgünüm, bulduğumu daha önce göndermedim. Aslında neyin değiştirilmesi gerektiğini görmek için yeniden araştırmam gerekiyordu. Alıntıları kaldırmanın işe yarayacağını kim düşünebilirdi? Bunu, bir iş arkadaşımın başka bir çözüm için derlemesini görüntülerken keşfettim ve tekliflerinin olmadığını fark ettim.


2
Bu çok tuhaf. Benim durumumda aynı hatayı aldım ama sorun şu ki, içinde boşluk olan alıntılanmamış bir yolum vardı. Tırnak işaretlerini eklemek sorunu çözdü.
Mark Arnott

@MarkArnott ile aynı sorunu yaşadım, boşluklarla veya kaçan boşluklarla çalışmadı, ancak alıntı yaptı.
Zitrax

7
Muhtemelen yolunuzdaki son ters eğik çizgi kapanış çift tırnaktan kaçıyordu. Doğruysa, çift tırnak işaretlerini kaldırmanız gerekmez, bunun yerine ters eğik çizgilerinizden kaçmanız gerekir.
Carl G

2
Dir yoldaki boşluklardan kaçınılması veya çift tırnak içine alınması gerektiğini
unutmayın

31

Git Bash'de parametreleri çift eğik çizgilerle belirtmem gerekiyordu, örneğin:

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

27

Bu sorun, boşluk içeren bir yolunuz veya özelliğiniz olduğunda ve bu alıntı yapılmadığında ortaya çıkar.

Tüm mallarınız ve yolunuzun etrafında alıntılar var, bu garip. Hata mesajı Educationbir anahtar olarak gösterir , /p:ProductName="Total Education TEST"çalışıp çalışmadığını görmek için kaldırmayı deneyin .


4
Bu sorundan kurtulmak için klasör yolunda Boşluktan kaçının.
Gopinath

1
@Julien Hoarau: Denedim 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. Bana bir hata veriyor MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Sorun ne olabilir?
Nevin Raj Victor

@NevinRajVictor Çok geç, ama muhtemelen alıntı yapmalısınızDefault WebSite/New
Anderson Pimentel

11

Yolun ve dosya adının çevresine qoutes koymanız gerekir.
Bu nedenle MSBuild "C: \ Yol Adı \ Dosya Adı.Exe" / [Seçenekler] kullanın


4

Yayınlama yolunuzun sonundaki ters eğik çizgiyi veya eğik çizgiyi kaldırmayı deneyin ve url'yi yükleyin

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

\ "Ve (veya) /" ile özel bir karakter dizisine basmış olmalısınız, ancak cmd.exe'de anlamaya yetecek kadar bilgim yok.

Ben şahsen her zaman Powershell kullanıyorum: çok daha arkadaş canlısı ve güçlü!

Umarım yardımcı olur!


3

Vs2012'de, varsayılan TFS şablonu "DefaultTemplate .... xaml" (genellikle bunun bir kopyası) kullanarak "Test Derlemesi" Derleme tanımı oluşturmaya çalışın.

Her zamanki kendini açıklayan hata ile başarısız olur: "MSBUILD: hata MSB1008: Yalnızca bir proje belirtilebilir.Switch: Etkinlikler"

Elbette varsayılan TFS şablonunun bir "yerinde bazıları eksiktir, bu nedenle msbuild, boşluk içeren çıkış yapılmamış bir dizini parametre olarak alır, bu nedenle birden çok projeyle sonuçlanır (?

Bu nedenle, TFS Derleme Tanımı adlarınızda ASLA boşluk kullanmayın, aynı anda oldukça üzücü ve basit


1
Bu cevap biraz toparlanmak işe yarayabilir. Takip etmesi çok zor.
theMayer

1
TFS Derleme Tanımı adlarınızda asla aralıklı kullanma ile ilgili nokta iyi bir noktadır! Bu beni defalarca yakaladı.
Valentein

3

Hatayı aldığımda parola parametresinin etrafında tek tırnak işaretleri kullanıyordum

/p:password='my secret' kötü

ve sorunu çözmek için çift tırnak kullanacak şekilde değiştirildi.

/p:password="my secret" iyi

Muhtemelen aynısı boşluk içeren değerler için tırnak işareti gerektiren herhangi bir parametre için de geçerli olacaktır.


3

Benim için kapanış teklifini eklemeyi unutmuştum

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

için

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


Ayrıca çift tırnak kapatmayı da kaçırıyordum.
habib

2

Gelecekteki okuyucular için.

Bu hatayı aldım çünkü belirtilen LOG dosyamda bir boşluk vardı:

ÖNCE:

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

SONRA: (çözen)

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

2

Yine bunun başka bir nedeni ve çözümü: Yanlış yere, yani parametrelerde boşluk koymadığınızdan emin olun; benimki dotnet -c Release - o /home/some/path( -ve arasındaki boşluğa dikkat edin o), yolun kendisine bakmaya devam ettim, bu doğruydu ve beni attı. Umarım yardımcı olur! (Bu Bash'teydi, ancak Windows için de geçerli olmalı)


1

Bu benim için TFS MSBuild Argümanında çalıştı. Eğik çizgi sayısını not edin.

/ p: DefaultPackageOutputDir = "\\ Rdevnet \ Visual Studio Projeleri \ Sigorta \"


1

Jenkins'te varsayılan çalışma alanını kullanırsanız, bu gerçekleşebilir. Boşluk olmadan özel çalışma alanı konumunu kullanın.

görüntü açıklamasını buraya girin


1

Azure DevOps MSBuildgörevini kullanıyorsanız , hatanın nedeni iki katına çıkarılmış yapılandırma bayrağı olabilir. Lütfen $(BuildConfiguration)MSBuild Arguments one yerine belirtilen kutuya koyduğunuzdan emin olun : görüntü açıklamasını buraya girin


1

Eğer kullanıyorsanız Any CPU , tek tırnak içine almanız gerekebilir.

Kesinlikle bir Dockerfile'da çalışırken, tek tırnak kullanmak zorunda kaldım:

# 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

Birinin benimle aynı sorunu yaşaması durumunda, "/ p" argümanlarından birinin önünde "/" eksikti. Açıklamadan pek net değil. Umarım bu birine yardımcı olur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.