MSBUILD: Fehler MSB1008: Es kann nur ein Projekt angegeben werden


115

Warum erhalte ich den folgenden Build-Fehler?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: Publizieren / p: Konfiguration = Release / p: Plattform = AnyCPU / v: detailliert / 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. Alle Rechte vorbehalten.

MSBUILD: Fehler MSB1008: Es kann nur ein Projekt angegeben werden.
Switch: Bildung

Geben Sie für die Switch-Syntax "MSBuild / help" ein.

Ich sehe nicht, wie ein zweites Projekt angegeben wird.
Wird es irgendwo in einer Projektdatei gespeichert?


4
Der gleiche Befehl funktioniert in Powershell, aber nicht in cmd.exe ... sieht so aus, als würden Sie irgendwo eine räumliche Zeichenfolge treffen ...
Cédric Rup

Antworten:


134

Es stellt sich heraus, dass der abschließende Schrägstrich in der PublishDir-Eigenschaft dem Endzitat entgeht. Das Entkommen aus dem nachgestellten Schrägstrich löste mein Problem.

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

Auf diese Weise können wir Anführungszeichen für Pfade verwenden, deren Eigenschaften Leerzeichen enthalten, für die MSBuild den abschließenden Schrägstrich benötigt.

Ich weiß, dass dies ein alter Beitrag ist, aber ich habe das Gefühl, dass ich ihn mit jemandem teilen musste :-)


45

LÖSUNG
Entfernen Sie die Anführungszeichen um die Einstellung / p: PublishDir

dh
anstelle von Anführungszeichen

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

Verwenden Sie keine Anführungszeichen

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

Es tut mir leid, dass ich meinen Befund nicht früher veröffentlicht habe. Ich musste tatsächlich noch einmal recherchieren, um zu sehen, was geändert werden musste. Wer hätte gedacht, dass das Entfernen von Anführungszeichen funktioniert hätte? Ich habe dies beim Anzeigen eines Mitarbeiter-Builds für eine andere Lösung festgestellt und festgestellt, dass keine Anführungszeichen vorhanden sind.


2
Das ist sehr seltsam. In meinem Fall habe ich den gleichen Fehler erhalten, aber das Problem ist, dass ich einen nicht zitierten Pfad mit einem Leerzeichen darin hatte. Durch Hinzufügen der Anführungszeichen wurde das Problem behoben.
Mark Arnott

Ich hatte das gleiche Problem wie @MarkArnott, es funktionierte nicht mit Leerzeichen oder maskierten Leerzeichen, aber das Zitieren tat es.
Zitrax

7
Wahrscheinlich war der letzte Backslash auf Ihrem Weg das abschließende doppelte Anführungszeichen. Wenn dies korrekt ist, müssen Sie die doppelten Anführungszeichen nicht entfernen, sondern müssen Ihren Backslashes entkommen.
Carl G

2
Denken Sie daran, dass die Leerzeichen im
Verzeichnispfad maskiert

30

Auf Git Bash musste ich die Parameter mit doppelten Schrägstrichen angeben wie:

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

27

Dieses Problem tritt auf, wenn Sie einen Pfad oder eine Eigenschaft haben, die ein Leerzeichen enthält und das nicht in Anführungszeichen steht.

Alle Ihre Eigenschaften und Pfade sind mit Zitaten versehen, es ist seltsam. Die Fehlermeldung zeigt Educationals Schalter an, versuchen Sie zu entfernen /p:ProductName="Total Education TEST", um zu sehen, ob es funktioniert.


4
Vermeiden Sie Speicherplatz im Ordnerpfad, um dieses Problem zu beheben.
Gopinath

1
@ Julien Hoarau: Ich habe es versucht 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. Es gibt mir einen Fehler MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Was könnte das Problem sein?
Nevin Raj Victor

@NevinRajVictor Viel zu spät, aber wahrscheinlich sollten Sie Zitate setzenDefault WebSite/New
Anderson Pimentel

11

Sie müssen qoutes um den Pfad und den Dateinamen setzen.
Verwenden Sie daher MSBuild "C: \ Pfadname \ Dateiname.Exe" / [Optionen]


4

Versuchen Sie, den nachfolgenden Backslash oder Slash am Ende Ihres Veröffentlichungspfads zu entfernen und die URL zu installieren

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

Sie müssen eine spezielle Zeichenfolge mit "und (oder) /" getroffen haben, aber ich weiß nicht genug in cmd.exe, um dies herauszufinden.

Ich persönlich benutze immer Powershell: es ist viel freundlicher und mächtiger!

Ich hoffe es hilft!


3

Versuchen Sie in vs2012 einfach, eine Build-Definition "Test Build" mit der Standard-TFS-Vorlage "DefaultTemplate .... xaml" (normalerweise eine Kopie davon) zu erstellen.

Es wird mit dem üblichen selbsterklärenden Fehler fehlschlagen: "MSBUILD: Fehler MSB1008: Es kann nur ein Projekt angegeben werden. Schalter: Aktivitäten"

Natürlich "fehlen irgendwo in der Standard-TFS-Vorlage einige , sodass msbuild als Parameter ein nicht maskiertes Verzeichnis mit Leerzeichen erhält, was zu mehreren Projekten führt (?!)

Verwenden Sie also NIEMALS Leerzeichen in Ihren TFS Build Definition-Namen, die ziemlich traurig und einfach zugleich sind


1
Diese Antwort könnte etwas Aufräumen gebrauchen. Sehr schwer zu folgen.
theMayer

1
Der Punkt über die Verwendung von Leerzeichen in Ihren TFS-Build-Definitionsnamen ist gut! Das hat mich mehrfach erwischt.
Valentein

3

Ich habe einfache Anführungszeichen um den Passwortparameter verwendet, als ich den Fehler bekam

/p:password='my secret' Schlecht

und änderte es, um doppelte Anführungszeichen zu verwenden, um das Problem zu beheben.

/p:password="my secret" gut

Dies gilt wahrscheinlich auch für alle Parameter, die Anführungszeichen für Werte benötigen, die ein Leerzeichen enthalten.


3

Für mich hatte ich vergessen, ein Schlusszitat hinzuzufügen

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

zu

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


Mir fehlten auch doppelte Anführungszeichen.
Habib

2

Für zukünftige Leser.

Ich habe diesen Fehler erhalten, weil meine angegebene LOG-Datei ein Leerzeichen enthält:

VOR:

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

AFTER: (was es gelöst hat)

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

2

Noch eine andere Ursache und Lösung dafür: Stellen Sie sicher, dass Sie kein Leerzeichen an der falschen Stelle platziert haben, dh in Parametern; meins war dotnet -c Release - o /home/some/path(beachte den Abstand zwischen -und o), ich schaute weiter auf den Pfad selbst, der korrekt war und warf mich ab. Hoffentlich hilft das! (Dies war in Bash, obwohl es auch für Windows gelten sollte)


1

Dies hat bei mir in TFS MSBuild Argument funktioniert. Notieren Sie die Anzahl der Schrägstriche.

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


1

Wenn Sie in Jenkins den Standardarbeitsbereich verwenden, kann dies auftreten. Verwenden Sie einen benutzerdefinierten Arbeitsbereich ohne Leerzeichen.

Geben Sie hier die Bildbeschreibung ein


1

Wenn Sie die Azure DevOps- MSBuildTask verwenden, kann der Fehler durch ein doppeltes Konfigurationsflag verursacht werden. Stellen Sie sicher, dass Sie $(BuildConfiguration)anstelle von MSBuild Arguments eins das angegebene Feld eingeben: Geben Sie hier die Bildbeschreibung ein


1

Wenn Sie verwenden Any CPU Sie es möglicherweise in einfache Anführungszeichen setzen.

Natürlich musste ich beim Ausführen in einer Docker-Datei einfache Anführungszeichen verwenden:

# 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

Nur für den Fall, dass jemand das gleiche Problem wie ich hat, fehlte mir "/" vor einem der "/ p" -Argumente. Nicht sehr klar aus der Beschreibung. Ich hoffe das hilft jemandem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.