web-dev-qa-db-fra.com

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

Pourquoi ai-je l'erreur de construction suivante?

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Code\EduBenesysNET\EduBenesysNET\EduBenesysNET.vbproj/t: publier/p: Configuration = Publication/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 =" TEST d'éducation totale "/ p: PublisherName =" BeneSys, Inc. "/p: UpdateRequired = "True" /p:MinimumRequiredVersion=1.0.1.198
Microsoft (R) Version du moteur de compilation 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: Education 

 Pour la syntaxe du commutateur, tapez "MSBuild /help".____. .

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

86
Gerhard Weiss

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

c'est à dire.
Au lieu de guillemets 

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

Ne pas utiliser de guillemets 

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

Je suis désolé de ne pas avoir posté ma découverte plus tôt. En fait, j'ai dû faire des recherches pour voir ce qui devait être changé. Qui aurait pensé que supprimer les guillemets aurait fonctionné? J'ai découvert cela en consultant une génération de collègues pour une autre solution et j'ai constaté qu'il ne contenait pas de guillemets.

33
Gerhard Weiss

Il se trouve que la barre oblique de fin dans la propriété PublishDir échappe à la citation finale. É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 comportant des espaces dans les propriétés pour lesquelles MSBuild requiert le slash de fin.

Je sais que c'est un ancien post, mais je sens que je devais le partager avec quelqu'un :-)

111
Matt

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 cité. 

Toutes vos propriétés et chemins ont des guillemets autour d'eux, c'est étrange. Le message d'erreur indique Education en tant que commutateur, essayez de supprimer /p:ProductName="Total Education TEST" pour voir si cela fonctionne.

22
Julien Hoarau

Sur Git Bash, je devais 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" 
10
friday

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

8
Zamir

Essayez de supprimer la barre oblique inverse ou la barre oblique à la fin du chemin de publication et installez l’URL.

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

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

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

J'espère que ça aide!

4
Cédric Rup

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

/p:password='my secret' mauvais 

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

/p:password="my secret" bon 

Il en va probablement de même pour tout paramètre nécessitant des guillemets pour les valeurs contenant un espace. 

2
John K

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 habituelle: "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 " sont manquants. Msbuild recevra en paramètre un répertoire non protégé contenant des espaces, ce qui entraînera plusieurs projets (?!)

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

2
user3636264

Encore une autre cause et solution à cela: Vérifiez que vous n’avez pas placé d’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 aussi s'appliquer à Windows)

2
Christian Rondeau

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

/ p: DefaultPackageOutputDir = "\\ Rdevnet\Projets Visual Studio\Assurance \"

1
Mark Monforti

Pour les futurs lecteurs.

J'ai eu cette erreur parce que 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"
1
granadaCoder

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

 enter image description here 

1
user8537391

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.

0
Johnny