MSBUILD: errore MSB1008: è possibile specificare un solo progetto


116

Perché ricevo il seguente errore di build?

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 versione 3.5.30729.1
[Microsoft .NET Framework, versione 2.0.50727.3603]
Copyright (C) Microsoft Corporation 2007. Tutti i diritti riservati.

MSBUILD: errore MSB1008: è possibile specificare un solo progetto.
Switch: istruzione

Per cambiare la sintassi, digita "MSBuild / help"

Non vedo come viene specificato un secondo progetto.
È archiviato in un file di progetto da qualche parte?


4
Lo stesso comando funziona in powershell ma non in cmd.exe ... sembra che tu stia colpendo una sequenza di caratteri spaziali da qualche parte ...
Cédric Rup

Risposte:


135

Risulta che la barra finale nella proprietà PublishDir sfugge alle virgolette finali. Sfuggire alla barra finale ha risolto il mio problema.

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

In questo modo possiamo usare le virgolette per i percorsi che hanno spazi bianchi nelle proprietà per le quali MSBuild richiede la barra finale.

So che questo è un vecchio post, ma mi sento come se avessi bisogno di condividerlo con qualcuno :-)


45

SOLUZIONE
Rimuovere le virgolette attorno all'impostazione / p: PublishDir

cioè
Invece di virgolette

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

Non utilizzare virgolette

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

Mi dispiace di non aver pubblicato prima la mia scoperta. In realtà ho dovuto fare di nuovo delle ricerche per vedere cosa doveva essere cambiato. Chi avrebbe mai pensato che la rimozione delle virgolette avrebbe funzionato? L'ho scoperto durante la visualizzazione della build di un collega per un'altra soluzione e ho notato che non conteneva virgolette.


2
Questo è molto strano. Nel mio caso ho ricevuto lo stesso errore ma il problema è che avevo un percorso non quotato con uno spazio al suo interno. L'aggiunta delle virgolette ha risolto il problema.
Mark Arnott

Ho avuto lo stesso problema di @MarkArnott, non funzionava con spazi o spazi di escape, ma la citazione sì.
Zitrax

7
Probabilmente l'ultima barra rovesciata nel tuo percorso stava sfuggendo alle virgolette doppie di chiusura. Se corretto, non è stato necessario rimuovere le virgolette doppie, ma invece è necessario eseguire l'escape dei backslash.
Carl G

2
Ricorda, gli spazi nel percorso della
directory

30

Su Git Bash ho dovuto specificare i parametri con doppie barre come:

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

27

Questo problema si verifica quando si dispone di un percorso o di una proprietà contenente uno spazio e che non è tra virgolette.

Tutte le tue proprietà e il tuo percorso hanno delle citazioni intorno a loro, è strano. Il messaggio di errore indica Educationcome interruttore, provare a rimuovere /p:ProductName="Total Education TEST"per vedere se funziona.


4
Evita lo spazio nel percorso della cartella per eliminare questo problema.
Gopinath,

1
@ Julien Hoarau: ci ho provato 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. Mi dà un errore MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Quale potrebbe essere il problema?
Nevin Raj Victor

@NevinRajVictor Molto tardi, ma probabilmente dovresti mettere le citazioni in giroDefault WebSite/New
Anderson Pimentel

11

È necessario inserire qoutes attorno al percorso e al nome del file.
Quindi usa MSBuild "C: \ Path Name \ File Name.Exe" / [Opzioni]


4

Prova a rimuovere la barra rovesciata o la barra alla fine del percorso di pubblicazione e installa l'URL

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

Devi aver colpito una sequenza speciale di caratteri con \ "e (o) /", ma non ne so abbastanza in cmd.exe per capirlo.

Personalmente uso sempre Powershell: è molto più amichevole e potente!

Spero che sia d'aiuto!


3

In vs2012 prova a creare una definizione di build "Test Build" utilizzando il modello TFS predefinito "DefaultTemplate .... xaml" (di solito una copia di esso)

Fallirà con il solito errore autoesplicativo: "MSBUILD: errore MSB1008: è possibile specificare un solo progetto. Commuta: attività"

Ovviamente da qualche parte nel modello TFS predefinito alcuni "mancano, quindi msbuild riceverà come parametro una directory senza escape contenente spazi, quindi risulterà in più progetti (?!)

Quindi non utilizzare MAI spazi nei nomi delle definizioni build TFS, piuttosto tristi e semplici allo stesso tempo


1
Questa risposta potrebbe richiedere un po 'di riordino. Molto difficile da seguire.
theMayer

1
Il punto su Non usare mai la spaziatura nei nomi della definizione build TFS è buono! Questo mi ha catturato più volte.
Valentein

3

Stavo usando virgolette singole attorno al parametro della password quando ho ricevuto l'errore

/p:password='my secret' male

e cambiato per utilizzare le virgolette doppie per risolvere il problema.

/p:password="my secret" bene

Probabilmente lo stesso si applicherebbe a qualsiasi parametro che necessita di virgolette per valori che contengono uno spazio.


3

Per me avevo dimenticato di aggiungere la citazione di chiusura

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

per

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


Mi mancavano anche le virgolette doppie di chiusura.
habib

2

Per i futuri lettori.

Ho ricevuto questo errore perché il mio file LOG specificato conteneva uno spazio:

PRIMA:

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

DOPO: (che lo ha risolto)

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

2

Ancora un'altra causa e soluzione a questo: controlla di non aver inserito uno spazio nel posto sbagliato, cioè nei parametri; il mio era dotnet -c Release - o /home/some/path(notare lo spazio tra -e o), ho continuato a guardare il percorso stesso, che era corretto e mi ha buttato fuori. Spero che aiuti! (questo era in Bash anche se dovrebbe essere applicato anche a Windows)


1

Questo ha funzionato per me in TFS MSBuild Argument. Prendi nota del numero di barre.

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


1

Se utilizzi l'area di lavoro predefinita in Jenkins, ciò potrebbe verificarsi. Usa la posizione dell'area di lavoro personalizzata senza spazi.

inserisci qui la descrizione dell'immagine


1

Se stai usando l'attività Azure DevOps, MSBuildl'errore potrebbe essere causato da un flag di configurazione raddoppiato. Assicurati di inserire $(BuildConfiguration)nella casella specificata invece di MSBuild Arguments uno: inserisci qui la descrizione dell'immagine


1

Se stai usando Any CPUpotresti aver bisogno di metterlo tra virgolette singole.

Certamente durante l'esecuzione in un Dockerfile, ho dovuto utilizzare virgolette singole:

# 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

Nel caso in cui qualcuno abbia il mio stesso problema, mancava "/" prima di uno degli argomenti "/ p". Non molto chiaro dalla descrizione. Spero che questo aiuti qualcuno.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.