wake-up-neo.com

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

Warum erhalte ich den folgenden Build-Fehler?

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Code\EduBenesysNET\EduBenesysNET\EduBenesysNET.vbproj/t: publish/p: Konfiguration = Veröffentlichung/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: Education 

 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?

86
Gerhard Weiss

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

d.h.
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 meine Entdeckung 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 Zitaten funktioniert hätte? Ich entdeckte dies beim Anblick eines Kollegen, der für eine andere Lösung gebaut wurde, und bemerkte, dass es keine Angebote gab.

33
Gerhard Weiss

Es stellt sich heraus, dass der nachstehende Schrägstrich in der PublishDir-Eigenschaft dem Endzitat nicht entspricht. Das Fliehen des nachgestellten Schrägstrichs 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, die Leerzeichen in Eigenschaften enthalten, für die MSBuild den nachstehenden Schrägstrich benötigt.

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

111
Matt

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

Alle Ihre Eigenschaften und Ihr Pfad haben Zitate um sich, es ist merkwürdig. In der Fehlermeldung wird Education als Schalter angezeigt. Versuchen Sie, /p:ProductName="Total Education TEST" zu entfernen, um zu sehen, ob es funktioniert.

22
Julien Hoarau

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

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

Sie müssen den Pfad und den Dateinamen mit qoutes versehen.
Verwenden Sie also MSBuild "C:\Pfadname\Dateiname.Exe"/[Optionen].

8
Zamir

Entfernen Sie den nachgestellten Backslash oder den Schrägstrich am Ende des Veröffentlichungspfads und installieren Sie die URL

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

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

Ich persönlich benutze immer Powershell: es ist viel freundlicher und kraftvoller!

Ich hoffe es hilft!

4
Cédric Rup

Ich habe den Passwortparameter in einfache Anführungszeichen gesetzt, als ich den Fehler bekam

/p:password='my secret' schlecht 

und änderte es, um das Problem in doppelte Anführungszeichen zu setzen. 

/p:password="my secret" gut 

Das gleiche gilt wahrscheinlich für jeden Parameter, der Anführungszeichen für Werte benötigt, die ein Leerzeichen enthalten. 

2
John K

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 fehlt irgendwo in der Standard-TFS-Vorlage einiges ", so dass msbuild als Parameter ein nicht mit Escapezeichen versehenes Verzeichnis erhält, das Leerzeichen enthält, sodass mehrere Projekte (?!)

Verwenden Sie also NIEMALS Leerzeichen in Ihren TFS-Build-Definitionsnamen, ziemlich traurig und gleichzeitig einfach

2
user3636264

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

2

Dies funktionierte für mich in TFS MSBuild Argument. Beachten Sie die Anzahl der Schrägstriche.

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

1
Mark Monforti

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

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

zu

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

1
Reza

Für zukünftige Leser.

Ich habe diese Fehlermeldung erhalten, weil meine angegebene LOG-Datei ein Leerzeichen enthielt:

VOR:

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

NACH: (was es gelöst hat)

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

Wenn Sie in Jenkins den Standardarbeitsbereich verwenden, kann dies vorkommen. Verwenden Sie einen benutzerdefinierten Speicherort für den Arbeitsbereich ohne Leerzeichen.

 enter image description here 

1
user8537391

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

0
Johnny