MSBUILD: error MSB1008: solo se puede especificar un proyecto

116

¿Por qué recibo el siguiente error de compilació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: detallado / 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 =" TEST de educación total "/ p: PublisherName =" BeneSys, Inc. " / p: UpdateRequired = "True" /p:MinimumRequiredVersion=1.0.1.198
Versión 3.5.30729.1 del motor de compilación de Microsoft (R)
[Microsoft .NET Framework, versión 2.0.50727.3603]
Copyright (C) Microsoft Corporation 2007. Todos los derechos reservados.

MSBUILD: error MSB1008: solo se puede especificar un proyecto.
Switch: Educación

Para cambiar la sintaxis, escriba "MSBuild / help"

No veo cómo se está concretando un segundo proyecto.
¿Está almacenado en un archivo de proyecto en algún lugar?

Gerhard Weiss
fuente
4
El mismo comando funciona en powershell pero no en cmd.exe ... parece que estás presionando una secuencia de caracteres espaciales en algún lugar ...
Cédric Rup

Respuestas:

135

Resulta que la barra inclinada final en la propiedad PublishDir se escapa de la comilla final. Escapar de la barra inclinada resolvió mi problema.

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

De esta manera, podemos usar comillas para rutas que tienen espacios en blanco en las propiedades que MSBuild requiere la barra final.

Sé que esta es una publicación antigua, pero siento que necesitaba compartir esto con alguien :-)

Mate
fuente
45

SOLUCIÓN
Eliminar las cotizaciones alrededor de la configuración / p: PublishDir

es decir, en
lugar de comillas

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

No use comillas

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

Lamento no haber publicado mi hallazgo antes. De hecho, tuve que investigar de nuevo para ver qué era necesario cambiar. ¿Quién hubiera pensado que eliminar las comillas funcionaría? Descubrí esto al ver la compilación de un compañero de trabajo para otra solución y noté que no tenía comillas.

Gerhard Weiss
fuente
2
Esto es muy extraño. En mi caso, obtuve el mismo error, pero el problema es que tenía una ruta sin comillas con un espacio. Agregar las citas solucionó el problema.
Mark Arnott
Tuve el mismo problema que @MarkArnott, no funcionó con espacios o espacios de escape, pero las citas sí.
Zitrax
7
Probablemente, la última barra invertida en su ruta escapaba de las comillas dobles de cierre. Si es correcto, entonces no necesita eliminar las comillas dobles, sino que debe escapar de las barras invertidas.
Carl G
2
Recuerde, los espacios en la ruta del directorio deben escaparse o deben colocarse entre comillas dobles
OK999
30

En Git Bash tuve que especificar los parámetros con barras dobles como:

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

Este problema aparece cuando tiene una ruta o una propiedad que contiene un espacio y que no está citada.

Todas tus propiedades y tu ruta tienen citas a su alrededor, es extraño. El mensaje de error indica Educationcomo un interruptor, intente quitarlo /p:ProductName="Total Education TEST"para ver si funciona.

Julien Hoarau
fuente
4
Evite el espacio en la ruta de la carpeta para deshacerse de este problema.
Gopinath
1
@Julien Hoarau: Lo intenté 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. Me da un error MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. ¿Cuál podría ser el problema?
Nevin Raj Victor
@NevinRajVictor Mucho tarde, pero probablemente deberías poner comillasDefault WebSite/New
Anderson Pimentel
11

Debe poner qoutes alrededor de la ruta y el nombre del archivo.
Entonces use MSBuild "C: \ Nombre de ruta \ Nombre de archivo.Exe" / [Opciones]

Zamir
fuente
4

Intente eliminar la barra diagonal inversa o la barra inclinada al final de su ruta de publicación e instale la URL

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

Debes haber marcado una secuencia especial de caracteres con \ "y (o) /", pero no sé lo suficiente en cmd.exe para averiguarlo.

Personalmente siempre uso Powershell: ¡es mucho más amigable y poderoso!

¡Espero eso ayude!

Cédric Rup
fuente
3

En vs2012 simplemente intente crear una definición de compilación "Prueba de compilación" utilizando la plantilla TFS predeterminada "DefaultTemplate .... xaml" (generalmente una copia de la misma)

Fallará con el habitual error autoexplicativo: "MSBUILD: error MSB1008: solo se puede especificar un proyecto. Cambiar: actividades"

Por supuesto, en algún lugar de la plantilla TFS predeterminada "faltan algunos , por lo que msbuild recibirá como parámetro un directorio sin escape que contiene espacios, por lo que resultará en múltiples proyectos (?!)

Así que NUNCA use espacios en sus nombres de definición de compilación TFS, bastante tristes y simples al mismo tiempo

user3636264
fuente
1
Esta respuesta podría necesitar un poco de orden. Muy difícil de seguir.
theMayer
1
¡El punto sobre nunca usar espacios en los nombres de la definición de compilación de TFS es bueno! Esto me ha atrapado varias veces.
Valentein
3

Estaba usando comillas simples alrededor del parámetro de contraseña cuando recibí el error

/p:password='my secret' malo

y lo cambió para usar comillas dobles para resolver el problema.

/p:password="my secret" bueno

Probablemente lo mismo se aplicaría a cualquier parámetro que necesite comillas para valores que contengan un espacio.

John K
fuente
3

Para mí, me había olvidado de agregar una cita de cierre.

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

a

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

Reza
fuente
También me faltaba cerrar las comillas dobles.
habib
2

Para futuros lectores.

Recibí este error porque mi archivo LOG especificado tenía un espacio en él:

ANTES DE:

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

DESPUÉS: (que lo resolvió)

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

Sin embargo, otra causa y solución a esto: Compruebe que no puso un espacio en el lugar incorrecto, es decir, en los parámetros; el mío era dotnet -c Release - o /home/some/path(fíjate en el espacio entre -y o), seguí mirando el camino en sí, que era correcto y me despistaba. ¡Espero que ayude! (esto estaba en Bash, aunque también debería aplicarse a Windows)

Christian Rondeau
fuente
1

Esto funcionó para mí en TFS MSBuild Argument. Tenga en cuenta el número de barras.

/ p: DefaultPackageOutputDir = "\\ Rdevnet \ Proyectos de Visual Studio \ Seguros \"

Mark Monforti
fuente
1

Si usa el espacio de trabajo predeterminado en Jenkins, esto podría ocurrir. Utilice la ubicación del espacio de trabajo personalizado sin espacios.

ingrese la descripción de la imagen aquí

usuario8537391
fuente
1

Si está utilizando la MSBuildtarea de Azure DevOps , el error puede deberse a una marca de configuración duplicada. Asegúrese de colocar el $(BuildConfiguration)cuadro especificado en lugar de los argumentos uno de MSBuild: ingrese la descripción de la imagen aquí

J. Wincewicz
fuente
1

Si lo está utilizando, Any CPUes posible que deba ponerlo entre comillas simples.

Ciertamente, al ejecutar en un Dockerfile, tuve que usar comillas simples:

# 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
fuente
0

En caso de que alguien tenga el mismo problema que yo, me faltaba "/" antes de uno de los argumentos "/ p". No muy claro por la descripción. Espero que esto ayude a alguien.

Johnny
fuente