MSBUILD: erreur MSB1008: un seul projet peut être spécifié


116

Pourquoi est-ce que j'obtiens l'erreur de construction suivante?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: publish / p: Configuration = Release / p: Platform = AnyCPU / v: détaillé / 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. Tous droits réservés.

MSBUILD: erreur MSB1008: un seul projet peut être spécifié.
Commutateur: éducation

Pour la syntaxe du commutateur, tapez «MSBuild / help»

Je ne vois pas comment un deuxième projet est spécifié.
Est-il stocké quelque part dans un fichier de projet?


4
La même commande fonctionne dans PowerShell mais pas dans cmd.exe ... on dirait que vous frappez une séquence de caractères spatiaux quelque part ...
Cédric Rup

Réponses:


135

Il s'avère que la barre oblique de fin dans la propriété PublishDir échappe le guillemet de fin. Échapper à la barre oblique finale a résolu mon problème.

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

De cette façon, nous pouvons utiliser des guillemets pour les chemins contenant des espaces dans les propriétés pour lesquelles MSBuild requiert la barre oblique de fin.

Je sais que c'est un ancien message, mais j'ai l'impression que je devais le partager avec quelqu'un :-)


45

SOLUTION
Supprimez les devis autour du paramètre / p: PublishDir

c'est-à-dire au
lieu de citations

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

N'utilisez pas de guillemets

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

Je suis désolé de ne pas avoir publié ma découverte plus tôt. J'ai en fait dû faire des recherches à nouveau pour voir ce qui devait être changé. Qui aurait pensé que la suppression des citations aurait fonctionné? J'ai découvert cela lors de la visualisation d'une compilation de collègues pour une autre solution et j'ai remarqué qu'elle ne contenait pas de devis.


2
C'est très étrange. Dans mon cas, j'ai eu la même erreur, mais le problème est que j'avais un chemin sans guillemets avec un espace. L'ajout des guillemets a résolu le problème.
Mark Arnott

J'ai eu le même problème que @MarkArnott, cela ne fonctionnait pas avec les espaces ou les espaces échappés, mais les citations l'ont fait.
Zitrax

7
La dernière barre oblique inverse de votre chemin a probablement échappé au guillemet double de fermeture. Si c'est correct, vous n'avez pas besoin de supprimer les guillemets doubles, mais vous devez à la place échapper vos contre-obliques.
Carl G

2
N'oubliez pas que les espaces dans le chemin dir doivent être échappés ou doivent être placés entre guillemets doubles
OK999

30

Sur Git Bash, j'ai dû spécifier les paramètres avec des doubles barres obliques comme:

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

27

Ce problème apparaît lorsque vous avez un chemin d'accès ou une propriété contenant un espace et qui n'est pas entre guillemets.

Toutes vos propriétés et votre chemin ont des citations autour d'eux, c'est étrange. Le message d'erreur indique Educationcomme interrupteur, essayez de supprimer /p:ProductName="Total Education TEST"pour voir si cela fonctionne.


4
Évitez l'espace dans le chemin du dossier pour vous débarrasser de ce problème.
Gopinath le

1
@Julien Hoarau: J'ai essayé 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. Cela me donne une erreur MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Quel pourrait être le problème?
Nevin Raj Victor

@NevinRajVictor Beaucoup de retard, mais vous devriez probablement mettre des citationsDefault WebSite/New
Anderson Pimentel

11

Vous devez mettre des qoutes autour du chemin et du nom du fichier.
Utilisez donc MSBuild "C: \ Path Name \ File Name.Exe" / [Options]


4

Essayez de supprimer la barre oblique inverse ou la barre oblique à la fin de votre chemin de publication et de l'URL d'installation

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

Vous devez avoir frappé une séquence spéciale de caractères avec le \ "et (ou) /", mais je ne sais pas assez dans cmd.exe pour comprendre.

Personnellement, j'utilise toujours Powershell: c'est beaucoup plus convivial et puissant!

J'espère que ça aide!


3

Dans vs2012, essayez simplement de créer une définition de construction "Test Build" en utilisant le modèle TFS par défaut "DefaultTemplate .... xaml" (généralement une copie de celui-ci)

Il échouera avec l'erreur habituelle d'auto-explication: "MSBUILD: erreur MSB1008: un seul projet peut être spécifié. Commutateur: Activités"

Bien sûr, quelque part dans le modèle TFS par défaut, certains "manquent, donc msbuild recevra en paramètre un répertoire non échappé contenant des espaces, ce qui entraînera plusieurs projets (?!)

Donc, n'utilisez JAMAIS d'espaces dans vos noms de définition de build TFS, assez tristes et simples à la fois


1
Cette réponse pourrait nécessiter un peu de rangement. Très difficile à suivre.
theMayer

1
Le point de ne jamais utiliser d'espacement dans vos noms de définition de build TFS est bon! Cela m'a attrapé plusieurs fois.
Valentein

3

J'utilisais des guillemets simples autour du paramètre de mot de passe lorsque j'ai eu l'erreur

/p:password='my secret' mauvais

et l'a changé pour utiliser des guillemets doubles pour résoudre le problème.

/p:password="my secret" bien

La même chose s'appliquerait probablement à tout paramètre nécessitant des guillemets pour les valeurs contenant un espace.


3

Pour moi, j'avais oublié d'ajouter un devis de clôture

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

à

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


Il me manquait également des guillemets doubles de fermeture.
habib

2

Pour les futurs lecteurs.

J'ai eu cette erreur car mon fichier LOG spécifié contenait un espace:

AVANT:

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

APRÈS: (qui l'a résolu)

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

2

Encore une autre cause et solution à cela: vérifiez que vous n'avez pas mis un espace au mauvais endroit, c'est-à-dire dans les paramètres; le mien était dotnet -c Release - o /home/some/path(notez l'espace entre -et o), j'ai continué à regarder le chemin lui-même, qui était correct et m'a jeté. J'espère que cela pourra aider! (c'était dans Bash mais cela devrait également s'appliquer à Windows)


1

Cela a fonctionné pour moi dans TFS MSBuild Argument. Notez le nombre de barres obliques.

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


1

Si vous utilisez l'espace de travail par défaut dans Jenkins, cela peut se produire. Utilisez l'emplacement de l'espace de travail personnalisé sans espace.

entrez la description de l'image ici


1

Si vous utilisez la MSBuildtâche Azure DevOps , l'erreur peut être causée par un indicateur de configuration doublé. Veuillez vous assurer que vous mettez $(BuildConfiguration)dans la case spécifiée au lieu d'un argument MSBuild: entrez la description de l'image ici


1

Si vous utilisez, Any CPUvous devrez peut-être le mettre entre guillemets simples.

Certes, lors de l'exécution dans un Dockerfile, j'ai dû utiliser des guillemets 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' 

0

Juste au cas où quelqu'un aurait le même problème que moi, il me manquait "/" avant l'un des arguments "/ p". Pas très clair d'après la description. J'espère que ça aidera quelqu'un.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.