MSBUILD : 错误 MSB1008: 只能指定一个项目
Posted
技术标签:
【中文标题】MSBUILD : 错误 MSB1008: 只能指定一个项目【英文标题】:MSBUILD : error MSB1008: Only one project can be specified 【发布时间】:2011-04-16 08:01:23 【问题描述】:为什么会出现以下构建错误?
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 框架,版本 2.0.50727.3603] 版权所有 (C) Microsoft Corporation 2007。保留所有权利。 。 开关:教育 对于切换语法,键入“MSBuild /help”
我没有看到如何指定第二个项目。 它是否存储在某个项目文件中?
【问题讨论】:
同样的命令在 powershell 中有效,但在 cmd.exe 中无效...看起来您在某处遇到了空间字符序列... 【参考方案1】:事实证明 PublishDir 属性中的尾部斜杠正在转义结束引号。转义斜杠解决了我的问题。
/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\\"
这样,我们可以在 MSBuild 需要尾部斜杠的属性中为具有空格的路径使用引号。
我知道这是一篇旧帖子,但我觉得我需要与某人分享:-)
【讨论】:
【参考方案2】:解决方案 删除 /p:PublishDir 设置周围的引号
即 而不是引号
/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\"
不使用引号
/p:PublishDir=\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest\
很抱歉我没有早点发布我的发现。实际上,我不得不再次研究以查看需要更改的内容。谁会想到删除引号会起作用?我在查看同事为另一个解决方案构建时发现了这一点,并注意到它没有引号。
【讨论】:
这很奇怪。就我而言,我遇到了同样的错误,但问题是我有一个未引用的路径,其中有一个空格。添加引号解决了问题。 我遇到了与@MarkArnott 相同的问题,它不适用于空格或转义空格,但引用可以。 可能你路径中的最后一个反斜杠正在转义结束的双引号。如果正确,则不需要删除双引号,而是需要转义反斜杠。 请记住,目录路径中的空格需要转义或必须放在双引号内【参考方案3】:在 Git Bash 上,我必须使用双斜杠指定参数,例如:
MSBuild.exe "Path\to\Solution.sln" //p:Platform="x86" //p:Configuration=Release //p:AppxBundlePlatforms="x86"
【讨论】:
看起来这是根本原因,与 Git_Bash 如何在 POSIX 路径上工作有关,以斜线开头,混合 windows 样式路径 双斜线解决,或者您可以禁用自动路径转换以保留互操作性历史:mingw.org/wiki/Posix_path_conversion 发行说明github.com/git-for-windows/build-extra/blob/…【参考方案4】:当您的路径或属性包含空格且未引用时,就会出现此问题。
你所有的属性和路径都有引号,这很奇怪。报错提示Education
为开关,尝试删除/p:ProductName="Total Education TEST"
看看是否有效。
【讨论】:
避免文件夹路径中的空格以解决此问题。 @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
。可能是什么问题?
@NevinRajVictor 晚了很多,但也许你应该在Default WebSite/New
周围加上引号【参考方案5】:
您需要在路径和文件名周围加上 qoutes。 所以使用 MSBuild "C:\Path Name\File Name.Exe" /[选项]
【讨论】:
【参考方案6】:尝试删除发布路径末尾的反斜杠或斜杠并安装 url
/p:PublishDir="\\BSIIS3\c$\DATA\WEBSITES\benesys.net\benesys.net\TotalEducationTest"
/p:InstallUrl="https://www.benesys.net/benesys.net/TotalEducationTest"
你一定是用 \" 和(或)/" 击中了一个特殊的字符序列,但我在 cmd.exe 中知道的不够多,无法弄清楚。
我个人一直使用 Powershell:它更友好、更强大!
希望对你有帮助!
【讨论】:
【参考方案7】:在 vs2012 中,只需尝试使用默认 TFS 模板“DefaultTemplate....xaml”(通常是它的副本)创建构建定义“测试构建”
它将失败并出现通常的自我解释错误:“MSBUILD : error MSB1008: Only one project can be specified.Switch: Activities”
默认 TFS 模板中的某处缺少一些 "
,因此 msbuild 将接收一个包含空格的非转义目录作为参数,因此将导致多个项目(?!)
所以永远不要在你的 TFS 构建定义名称中使用空格,同时非常悲伤和简单
【讨论】:
这个答案可能需要整理一下。很难跟上。 永远不要在你的 TFS 构建定义名称中使用空格是一个很好的观点!这让我多次抓到。【参考方案8】:当我收到错误时,我在密码参数周围使用了单引号
/p:password='my secret'
不好
并将其更改为使用双引号来解决问题。
/p:password="my secret"
好
这可能同样适用于任何需要为包含空格的值加上引号的参数。
【讨论】:
【参考方案9】:对我来说,我忘了加上结束语
/p:DeployOnBuild=true;OutDir="$(build.artifactstagingdirectory)
到
/p:DeployOnBuild=true;OutDir="$(build.artifactstagingdirectory)"
【讨论】:
我还缺少右双引号。【参考方案10】:还有另一个原因和解决方案:检查您是否没有在错误的位置放置空格,即在参数中;我的是dotnet -c Release - o /home/some/path
(注意-
和o
之间的空格),我一直在看路径本身,这是正确的,让我失望了。希望有帮助! (这是在 Bash 中,但它也应该适用于 Windows)
【讨论】:
【参考方案11】:这在 TFS MSBuild Argument 中对我有用。注意斜线的数量。
/p:DefaultPackageOutputDir="\\Rdevnet\Visual Studio Projects\Insurance\"
【讨论】:
【参考方案12】:如果您在 Jenkins 中使用默认工作区,则可能会发生这种情况。 使用没有任何空格的自定义工作区位置。
【讨论】:
【参考方案13】:为未来的读者。
我收到此错误是因为我指定的 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"
【讨论】:
【参考方案14】:如果您使用 Azure DevOps MSBuild
任务,错误可能是由双重配置标志引起的。请确保将 $(BuildConfiguration)
放在指定框中,而不是 MSBuild Arguments 之一:
【讨论】:
【参考方案15】:如果您使用的是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'
【讨论】:
【参考方案16】:对我来说,在双引号中添加解决方案文件的路径解决了这个问题。路径中的一个文件夹的名称中有一个空格,这导致它考虑 2 个解决方案文件而不是一个。 我在下面执行的是并且它有效。
MSBuild.exe "C:\Folder Name With Space\Project\project.sln"
【讨论】:
【参考方案17】:以防万一有人和我有同样的问题,我在“/p”参数之一之前缺少“/”。从描述上看不是很清楚。我希望这对某人有所帮助。
【讨论】:
【参考方案18】:我确实使用了https://www.codingdefined.com/2014/10/solved-msbuild-error-msb1008-only-one.html 中给出的解决方案,这解决了这个问题。我们需要做的就是检查命令中的空格和''(检查反斜杠)
【讨论】:
【参考方案19】:我用一个非常简单的命令遇到了这个问题,它不包含任何引号、任何空格、任何斜线,任何奇怪的东西。
我使用的是 MINGW64 shell。
PowerShell 中的完全相同的命令反而起作用了。
【讨论】:
【参考方案20】:就我而言,是开关。我通过使用 -p 而不是 /p 解决了它。
【讨论】:
以上是关于MSBUILD : 错误 MSB1008: 只能指定一个项目的主要内容,如果未能解决你的问题,请参考以下文章
Rider Xamarin 错误 MSB1008:只能指定一个项目
错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入
MSBuild 无法使用临时密钥签署 ClickOnce 清单(错误 MSB3326 和 MSB3321)