MSBUILD:错误MSB1008:只能指定一个项目


116

为什么会出现以下Build错误?

C:\ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C:\ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t:发布/ p:配置=发布/ p:平台= AnyCPU / v:详细/ 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 =”全面教育测试“ / p:PublisherName =” BeneSys,Inc.“ / p:UpdateRequired =“ True” /p:MinimumRequiredVersion=1.0.1.198
Microsoft(R)构建引擎版本3.5.30729.1
[Microsoft .NET Framework,版本2.0.50727.3603]
版权所有(C)Microsoft Corporation2007。保留所有权利。

MSBUILD:错误MSB1008:只能指定一个项目。
切换:教育

对于开关语法,键入“ MSBuild / help”

我看不到如何指定第二个项目。
它存储在项目文件中的某个地方吗?


4
非常相同的命令在PowerShell中而不是在cmd.exe的作品......看起来,你是打一个空间字符sequance某处...
塞德里克RUP

Answers:


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
这很奇怪。在我的情况下,我遇到了同样的错误,但是问题是我有一个未引用的路径,其中包含空格。添加引号解决了该问题。
马克·阿诺特

我遇到了与@MarkArnott相同的问题,它不适用于空格或转义的空格,但引用可以。
Zitrax

7
您路径中的最后一个反斜杠可能是转义结束的双引号。如果正确,则无需删除双引号,而是需要转义反斜杠。
卡尔·G

2
请记住,目录路径中的空格需要转义或必须放在双引号中
OK999,2016年

30

在Git Bash上,我必须用双斜杠指定参数,例如:

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
@Julien Hoarau:我尝试过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
Anderson Pimentel

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”(通常是其副本)来创建“测试构建”的构建定义

它将失败,并显示通常的自解释错误:“ MSBUILD:错误MSB1008:只能指定一个项目。开关:活动”

当然,默认TFS模板中的某些"位置缺少某些内容,因此msbuild将收到一个包含空格的非转义目录作为参数,因此将导致多个项目(?!)

因此,永远不要在您的TFS构建定义名称中使用空格,而同时又很伤心又简单


1
这个答案可能需要整理一下。很难遵循。
theMayer

1
关于从不使用TFS构建定义名称中的空格的观点是一个很好的观点!这多次引起我的注意。
Valentein 2014年

3

出现错误时,我在password参数周围使用了单引号

/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任务,则该错误可能是由于配置标志加倍而引起的。请确保您$(BuildConfiguration)在指定的方框中放入而不是MSBuild参数之一: 在此处输入图片说明


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”参数之一之前缺少“ /”。从描述中不是很清楚。我希望这可以帮助别人。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.