MSBUILD : 오류 MSB1008 : 하나의 프로젝트 만 지정할 수 있습니다.


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 : 하나의 프로젝트 만 지정할 수 있습니다.
스위치 : 교육

스위치 구문의 경우 "MSBuild / help"를 입력합니다.

두 번째 프로젝트가 어떻게 지정되는지 알 수 없습니다.
프로젝트 파일에 어딘가에 저장되어 있습니까?


4
바로 그 같은 명령은 ... 당신 같은 외모는 공간적 문자 sequance의 곳을 타격 ... PowerShell에서하지만 cmd.exe를 작동
세드릭 RUP를에게

답변:


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

@MarkArnott와 동일한 문제가 있었는데 공백이나 이스케이프 공백으로 작동하지 않았지만 인용은 작동했습니다.
Zitrax 2013

7
아마도 경로의 마지막 백 슬래시는 닫는 큰 따옴표를 이스케이프했을 것입니다. 맞다면 큰 따옴표를 제거 할 필요가 없지만 대신 백 슬래시를 이스케이프해야합니다.
Carl G

2
dir 경로의 공백은 이스케이프하거나 큰 따옴표 안에 넣어야합니다
OK999

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

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

경로와 파일 이름 주위에 qout을 넣어야합니다.
따라서 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 : 하나의 프로젝트 만 지정할 수 있습니다. 스위치 : 활동"

물론 기본 TFS 템플릿 어딘가에 일부 "가 누락되어 msbuild가 공백을 포함하는 이스케이프되지 않은 디렉터리를 매개 변수로 수신하므로 여러 프로젝트 (?!)

따라서 TFS 빌드 정의 이름에 공백을 사용하지 마십시오. 매우 슬프고 단순합니다.


1
이 대답은 약간의 정리를 사용할 수 있습니다. 따라 가기가 매우 어렵습니다.
theMayer 2014-08-28

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), 나는 계속해서 경로 자체를 봤는데, 그것은 정확하고 나를 버렸다. 도움이 되었기를 바랍니다. (이것은 Bash에 있었지만 Windows에도 적용되어야 함)


1

이것은 TFS MSBuild Argument에서 저에게 효과적이었습니다. 슬래시 수에 유의하십시오.

/ 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"인수 앞에 "/"가 누락되었습니다. 설명에서 명확하지 않습니다. 누군가에게 도움이되기를 바랍니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.