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

为什么我会得到下面的生成错误?

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"

我没有看到如何指定第二个项目。
是否存储在某个项目文件中?

148055 次浏览

当路径或属性包含空格且未引号时,将出现此问题。

你所有的属性和路径都有他们的报价,这很奇怪。错误消息指示 Education作为开关,尝试删除 /p:ProductName="Total Education TEST"以查看它是否工作。

您需要在路径和文件名周围放置 qoutes。
那就用吧 MSBuild“ C: 路径名称文件名.Exe”/[选项]

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

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

您必须使用“ and (or)/”命中一个特殊的字符序列,但是我对 cmd.exe 的了解不足以计算出。

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

希望能有帮助!

解决方案
删除/p: PublishDir 设置周围的引号

也就是说。
而不是引用

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

不要用引号

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

很抱歉我没有早点发布我的发现。实际上,我不得不再次研究,看看需要改变什么。谁会想到删除引号会有用呢?我在查看同事为另一个解决方案构建时发现了这一点,并注意到它没有引号。

原来 PublishDir 属性的尾部斜杠正在转义结束引号。避开尾部斜线解决了我的问题。

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

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

我知道这是一篇老文章,但我觉得我需要和别人分享这篇文章: -)

这在 TFS MSBuild 参数中对我有效。请注意斜杠的数量。

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

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

它将失败,并出现通常的自我解释错误: “ MSUILD: error MSB1008: 只能指定一个项目

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

因此,永远不要在你的 TFS 建立定义名称空格,相当悲哀和简单的同时

当我得到错误时,我在 password 参数周围使用了单引号

血氧饱和度很差

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

血氧饱和度正常

对于任何需要为包含空格的值引号的参数,可能也是同样的情况。

为了以防有人和我有同样的问题,我在一个“/p”参数之前漏掉了“/”。描述不太清楚。我希望这能帮到别人。

对我来说,我忘记加上结束语

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

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

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

enter image description here

为了未来的读者。

我得到这个错误是因为我指定的日志文件中有一个空格:

之前:

/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"

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

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

还有另一个原因和解决方案: 检查你没有在错误的地方放置空格,也就是在参数中; 我的是 dotnet -c Release - o /home/some/path(注意 -o之间的空格) ,我一直在查看路径本身,它是正确的,这让我很困惑。希望能帮上忙!(这是在 Bash 中使用的,不过也应该适用于 Windows)

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

如果您正在使用 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'

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

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

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

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

我用的是 MINGW64外壳。

相反,PowerShell 中的同一个命令起了作用。

在我的例子中,是开关。我使用-p 而不是/p 来解决这个问题。

就我而言:

dotnet build -c Release --no-restore -p:Version=${VERSION} -p:Description=${DESCRIPTION}

我犯了一个错误:

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

但我改变了它:

-p:Description=${DESCRIPTION}

-p:Description="${DESCRIPTION}"

而且很有效。

在使用 .NET 6 CLI时,当使用-d 运行测试命令时,会遇到“ MSBUILD: 错误 MSB1008: 只能指定一个项目。

不是工作

 dotnet test Abc.Tests.csproj -d "verbose_log.txt"

工作

 dotnet test Abc.Tests.csproj -d="verbose_log.txt"
dotnet test Abc.Tests.csproj -d:"verbose_log.txt"
dotnet test Abc.Tests.csproj --diag "verbose_log.txt"