MSBUILD:エラーMSB1008:指定できるプロジェクトは1つだけです


116

次のビルドエラーが発生するのはなぜですか?

C:\ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C:\ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t:publish / p:Configuration = Release / p:Platform = AnyCPU / v:detailed / 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バージョン3.5.30729.1
[Microsoft .NET Framework、バージョン2.0.50727.3603]
Copyright(C)Microsoft Corporation 2007.無断複写・転載を禁じます。

MSBUILD:エラーMSB1008:指定できるプロジェクトは1つだけです。
スイッチ:教育

スイッチ構文については、「MSBuild / help」と入力します。

2番目のプロジェクトがどのように指定されているのかわかりません。
プロジェクトファイルのどこかに保存されていますか?


4
まったく同じコマンドがpowershellでは機能しますが、cmd.exeでは機能しません...どこかで空間文字シーケンスにヒットしているようです...
セドリック

回答:


135

PublishDirプロパティの末尾のスラッシュが終了引用符をエスケープしていることがわかります。末尾のスラッシュをエスケープすると問題が解決しました。

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

この方法では、MSBuildで末尾のスラッシュが必要なプロパティに空白があるパスに引用符を使用できます。

私はこれが古い投稿であることを知っていますが、誰かと共有する必要があると思います:-)


45

ソリューションは、
/ Pの前後に引用符を削除します。PublishDir設定

つまり
、引用符の代わりに

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

引用符を使用しない

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

早く発見を投稿しなかったのは残念です。何を変更する必要があるかを確かめるために、私は実際に再度調査する必要がありました。だれが引用の削除がうまくいくと思ったでしょうか?他のソリューションの同僚のビルドを表示しているときにこれを発見し、見積もりがないことに気づきました。


2
これは非常に奇妙です。私の場合、同じエラーが発生しましたが、問題は、引用符で囲まれていないパスにスペースが含まれていることです。引用符を追加すると問題が修正されました。
Mark Arnott、2011

@MarkArnottと同じ問題がありました。スペースやエスケープされたスペースでは機能しませんでしたが、引用は機能しました。
Zitrax 2013

7
おそらく、パスの最後のバックスラッシュは、終了の二重引用符をエスケープしていました。正しければ、二重引用符を削除する必要はありませんでしたが、代わりにバックスラッシュをエスケープする必要がありました。
カールG

2
dirパスのスペースはエスケープする必要があるか、二重引用符で
囲む

30

Git Bashでは、パラメーターを次のように2つのスラッシュで指定する必要がありました。

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

27

この問題は、スペースを含むパスまたはプロパティがあり、引用符で囲まれていない場合に発生します。

すべてのプロパティとパスは引用符で囲まれていますが、奇妙です。エラーメッセージはEducationスイッチとして示されます/p:ProductName="Total Education TEST"。削除してみて、機能するかどうかを確認してください。


4
この問題を解消するには、フォルダーパスにスペースを入れないでください。
Gopinath 2012

1
@ジュリアン・ホアラウ:試しました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。それは私にエラーを与えます MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New。問題は何でしょうか?
Nevin Raj Victor

@NevinRajVictorかなり遅いですが、おそらく引用符で囲む必要がありますDefault WebSite/New
アンダーソンピメンテル

11

パスとファイル名をqoutesで囲む必要があります。
MSBuild "C:\ Path Name \ File Name.Exe" / [Options]を使用します


4

パブリッシュパスの最後にある末尾のバックスラッシュまたはスラッシュを削除して、URLをインストールしてください

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

\ "および(または)/"を使用して特殊な文字シーケンスをヒットした必要がありますが、cmd.exeでそれを理解するのに十分な知識がありません。

私は個人的に常にPowershellを使用しています。

それが役に立てば幸い!


3

vs2012では、デフォルトのTFSテンプレート "DefaultTemplate .... xaml"(通常はそのコピー)を使用して、ビルド定義 "Test Build"を作成してみます。

通常の自己説明エラーで失敗します: "MSBUILD:エラーMSB1008:プロジェクトは1つしか指定できません。スイッチ:アクティビティ"

もちろん、デフォルトのTFSテンプレートのどこかに"欠けているものがあるため、msbuildはスペースを含むエスケープされていないディレクトリをパラメーターとして受け取るため、複数のプロジェクト(?!)

したがって、TFSビルド定義の名前にスペースを使用しないでください。


1
この回答は、整理整頓に使用できます。従うのは非常に難しい。
theMayer 2014

1
TFSビルド定義名でスペースを使用しないことのポイントは良いことです!これは何度も私を捕まえました。
Valentein 2014年

3

エラーが発生したとき、パスワードパラメータを一重引用符で囲んでいました

/p:password='my secret' 悪い

問題を解決するために二重引用符を使用するように変更しました。

/p:password="my secret" 良い

同じことが、スペースを含む値の引用符を必要とするすべてのパラメーターに当てはまるでしょう。


3

私にとっては、最後の引用を追加するのを忘れていました

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

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


二重引用符も閉じていませんでした。
habib

2

将来の読者のために。

指定したLOGファイルにスペースが含まれていたため、このエラーが発生しました。

前:

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

後:(それを解決しました)

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

2

さらに別の原因とこれに対する解決策:スペースを間違った場所、つまりパラメーターに配置していないことを確認してください。私はdotnet -c Release - o /home/some/path-との間のスペースに注意してくださいo)、私はパス自体を見続けました。お役に立てば幸いです。(これはWindowsにも適用されるはずですが、Bashにありました)


1

これは、TFS MSBuildの引数で機能しました。スラッシュの数に注意してください。

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


1

Jenkinsでデフォルトのワークスペースを使用すると、これが発生する可能性があります。スペースなしでカスタムワークスペースの場所を使用します。

ここに画像の説明を入力してください


1

Azure DevOps MSBuildタスクを使用している場合、エラーは構成フラグが2重になっていることが原因である可能性があります。$(BuildConfiguration)MSBuild引数1ではなく、指定したボックスに入力してください。 ここに画像の説明を入力してください


1

使用しているAny CPU場合は、一重引用符で囲む必要がある場合があります。

確かに、Dockerfileで実行するときは、単一​​引用符を使用する必要がありました。

# 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

誰かが私と同じ問題を抱えている場合に備えて、「/ p」引数の前に「/」がありませんでした。説明からあまり明確ではありません。これが誰かの役に立つことを願っています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.