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

时间:2010-09-23 14:59:34

标签: visual-studio visual-studio-2008 msbuild

为什么我收到以下构建错误?

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 Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3603]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

MSBUILD : error MSB1008: Only one project can be specified.
Switch: Education

For switch syntax, type "MSBuild /help"

我没看到如何指定第二个项目 它存储在某个项目文件中吗?

19 个答案:

答案 0 :(得分:115)

事实证明,PublishDir属性中的尾部斜杠是转义结束引号。逃避尾随斜线解决了我的问题。

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

这样我们可以为MSBuild需要尾部斜杠的属性中具有空格的路径使用引号。

我知道这是一个老帖子,但我觉得我需要与某人分享: - )

答案 1 :(得分:33)

<强>解
删除/ 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 :(得分:22)

如果路径或属性包含空格且未引用,则会出现此问题。

你的所有属性和路径都引用了它们,这很奇怪。该错误消息指示Education为开关,请尝试删除/p:ProductName="Total Education TEST"以查看其是否有效。

答案 3 :(得分:15)

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

<!DOCTYPE html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>

<head>
  <meta charset="utf-8" />
  <link rel="shortcut icon" href="//#" />
  <script type="text/javascript" src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>
  <script type="text/javascript" src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
</head>

<body>
  <div id="capture" style="padding: 10px; background: #f5da55">
    <h4 style="color: #000; ">Helloo world!</h4>
  </div>

  <div style="padding: 10px; background: pink">
    <h4 style="color: #000; ">Helloo world!</h4>
  </div>

  <div style="padding: 10px; background: black">
    <h4 style="color: white; ">Helloo world!</h4>
  </div>
  <div id="match-button" onclick="sendData();">capture</div>
  <a id="test" href="#"></a>
</body>

</html>

答案 4 :(得分:8)

您需要在路径和文件名周围加上引号 所以使用 MSBuild“C:\ Path Name \ File Name.Exe”/ [Options]

答案 5 :(得分:4)

尝试删除发布路径末尾的尾部反斜杠或斜杠并安装网址

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

你必须使用\“和(或)/”命中一个特殊的字符序列,但我不知道cmd.exe中有足够的数字来解决。

我个人总是使用Powershell:它更加友好和强大!

希望它有所帮助!

答案 6 :(得分:2)

在vs2012中,尝试使用默认的TFS模板“DefaultTemplate .... xaml”(通常是它的副本)创建构建定义“Test Build”

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

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

所以永远不要在你的TFS Build Definition名称中使用空格,同时非常悲伤和简单

答案 7 :(得分:2)

当我收到错误

时,我在密码参数周围使用单引号

/p:password='my secret'不好

并将其更改为使用双引号来解决问题。

/p:password="my secret"

可能同样适用于需要包含空格的值的引用的任何参数。

答案 8 :(得分:2)

还有另一个原因和解决方案:检查您没有在错误的地方(即参数中)放置空格;我的是dotnet -c Release - o /home/some/path(请注意-o之间的空格),我一直在寻找路径本身,这是正确的,并把我甩了出去。希望有帮助! (虽然它也适用于Windows,但在Bash中使用)

答案 9 :(得分: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"

答案 10 :(得分:1)

对我来说,我忘了添加收尾报价

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

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

答案 11 :(得分: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' 

答案 12 :(得分:1)

如果在Jenkins中使用默认工作区,则可能会发生这种情况。 使用不带任何空格的自定义工作空间位置。

enter image description here

答案 13 :(得分:1)

这在TFS MSBuild Argument中适用于我。请注意斜杠的数量。

/ p:DefaultPackageOutputDir =“\\ Rdevnet \ Visual Studio Projects \ Insurance \”

答案 14 :(得分:0)

万一有人和我有同样的问题,我在其中一个“/ p”参数之前错过了“/”。从描述中不是很清楚。我希望这有助于某人。

答案 15 :(得分:0)

如果您正在使用Azure DevOps MSBuild任务,则该错误可能是由双倍的配置标志引起的。请确保将$(BuildConfiguration)放置在指定框中而不是MSBuild参数之一: enter image description here

答案 16 :(得分:0)

我确实使用了https://www.codingdefined.com/2014/10/solved-msbuild-error-msb1008-only-one.html中给出的解决方案,从而解决了该问题。我们需要做的就是在命令中检查空格和''(检查反斜杠)

答案 17 :(得分:0)

对我来说,在双引号中添加解决方案文件的路径解决了这个问题。路径中的一个文件夹的名称中有一个空格,这导致它考虑 2 个解决方案文件而不是一个。 我在下面执行了它并且它起作用了。

MSBuild.exe "C:\Folder Name With Space\Project\project.sln"

答案 18 :(得分:0)

我用一个非常简单的命令遇到了这个问题,它不包含任何引号、任何空格、任何斜杠、任何奇怪的东西。

我使用的是 MINGW64 外壳。

来自 PowerShell 的完全相同的命令反而起作用了。