MSBUILD: erro MSB1008: Apenas um projeto pode ser especificado


116

Por que estou recebendo o seguinte erro de compilação?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: publicar / p: Configuração = Versão / p: Plataforma = AnyCPU / v: detalhado / 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 Versão 3.5.30729.1
[Microsoft .NET Framework, Versão 2.0.50727.3603]
Copyright (C) Microsoft Corporation 2007. Todos os direitos reservados.

MSBUILD: erro MSB1008: Apenas um projeto pode ser especificado.
Switch: Educação

Para a sintaxe do switch, digite "MSBuild / help"

Não vejo como um segundo projeto está sendo especificado.
Ele está armazenado em um arquivo de projeto em algum lugar?


4
O mesmo comando funciona em powershell, mas não em cmd.exe ... parece que você está atingindo uma sequência de caracteres espaciais em algum lugar ...
Cédric Rup

Respostas:


135

Acontece que a barra final na propriedade PublishDir está escapando da citação final. Escapar da barra final resolveu meu problema.

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

Dessa forma, podemos usar aspas para caminhos que possuem espaços em branco nas propriedades que o MSBuild exige a barra final.

Eu sei que esta é uma postagem antiga, mas sinto que precisava compartilhar isso com alguém :-)


45

SOLUÇÃO
Remova as cotações em torno da configuração / p: PublishDir

ou seja, em
vez de aspas

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

Não use aspas

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

Lamento não ter postado minha descoberta antes. Na verdade, tive que pesquisar novamente para ver o que precisava ser mudado. Quem teria pensado que remover aspas teria funcionado? Eu descobri isso ao ver a construção de um colega de trabalho para outra solução e percebi que não havia aspas.


2
Isto é muito estranho. No meu caso, obtive o mesmo erro, mas o problema é que tinha um caminho não citado com um espaço nele. Adicionar as aspas resolveu o problema.
Mark Arnott

Eu tive o mesmo problema que @MarkArnott, ele não funcionou com espaços ou espaços escapados, mas citando funcionou.
Zitrax

7
Provavelmente, a última barra invertida em seu caminho estava escapando da aspa dupla de fechamento. Se estiver correto, você não precisa remover as aspas duplas, mas, em vez disso, precisa escapar das barras invertidas.
Carl G

2
Lembre-se, os espaços no caminho dir precisam ser escapados ou colocados entre aspas duplas
OK999

31

No Git Bash, tive que especificar os parâmetros com barras duplas como:

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

27

Esse problema aparece quando você tem um caminho ou uma propriedade que contém um espaço e que não está entre aspas.

Todas as suas propriedades e caminhos têm citações em torno deles, é estranho. A mensagem de erro indica Educationcomo um switch, tente remover /p:ProductName="Total Education TEST"para ver se funciona.


4
Evite espaço no caminho da pasta para se livrar desse problema.
Gopinath

1
@Julien Hoarau: Eu tentei 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. Isso me dá um erro MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New. Qual pode ser o problema?
Nevin Raj Victor

@NevinRajVictor Muito tarde, mas provavelmente você deveria colocar aspasDefault WebSite/New
Anderson Pimentel

11

Você precisa colocar qoutes em torno do caminho e nome do arquivo.
Portanto, use MSBuild "C: \ Path Name \ File Name.Exe" / [Options]


4

Tente remover a barra invertida ou barra no final de seu caminho de publicação e url de instalação

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

Você deve ter atingido uma sequência especial de caracteres com o \ "e (ou) /", mas não sei o suficiente em cmd.exe para descobrir.

Eu pessoalmente sempre uso o Powershell: é muito mais amigável e poderoso!

Espero que ajude!


3

No vs2012 apenas tente criar uma definição de Build "Test Build" usando o modelo TFS padrão "DefaultTemplate .... xaml" (geralmente uma cópia dele)

Ele irá falhar com o erro autoexplicativo usual: "MSBUILD: erro MSB1008: Apenas um projeto pode ser especificado. Trocar: Atividades"

Claro, em algum lugar do modelo TFS padrão, alguns "estão faltando, então msbuild receberá como parâmetro um diretório sem escape contendo espaços, resultando em vários projetos (?!)

Portanto, NUNCA use espaços em seus nomes de definição de compilação do TFS, muito tristes e simples ao mesmo tempo


1
Esta resposta precisa de um pouco de arrumação. Muito difícil de seguir.
theMayer

1
O ponto sobre Nunca usar espaçados em seus nomes de definição de compilação do TFS é um bom argumento! Isso me pegou várias vezes.
Valentein

3

Eu estava usando aspas simples no parâmetro de senha quando recebi o erro

/p:password='my secret' ruim

e alterei-o para usar aspas duplas para resolver o problema.

/p:password="my secret" Boa

Provavelmente, o mesmo se aplica a qualquer parâmetro que precise de aspas para valores que contêm um espaço.


3

Para mim eu tinha esquecido de adicionar a cotação de fechamento

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

para

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


Eu também estava perdendo aspas duplas de fechamento.
habib

2

Para futuros leitores.

Recebi este erro porque meu arquivo de LOG especificado tinha um espaço:

ANTES:

/l:FileLogger,Microsoft.Build.Engine;logfile=c:\Folder With Spaces\My_Log.log

DEPOIS: (que resolveu)

/l:FileLogger,Microsoft.Build.Engine;logfile="c:\Folder With Spaces\My_Log.log"

2

Mais uma causa e solução para isso: Verifique se você não colocou um espaço no lugar errado, ou seja, nos parâmetros; o meu era dotnet -c Release - o /home/some/path(observe o espaço entre -e o), continuei olhando para o próprio caminho, que estava correto e me jogou fora. Espero que ajude! (isso estava no Bash, embora também deva se aplicar ao Windows)


1

Isso funcionou para mim no TFS MSBuild Argument. Observe o número de barras.

/ p: DefaultPackageOutputDir = "\\ Rdevnet \ Visual Studio Projects \ Insurance \"


1

Se você usar o espaço de trabalho padrão no Jenkins, isso pode ocorrer. Use a localização do espaço de trabalho personalizado sem nenhum espaço.

insira a descrição da imagem aqui


1

Se você estiver usando a MSBuildtarefa do Azure DevOps , o erro pode ser causado por sinalizador de configuração duplicado. Certifique-se de colocar $(BuildConfiguration)na caixa especificada em vez de Argumentos do MSBuild um: insira a descrição da imagem aqui


1

Se você estiver usando, Any CPUpode ser necessário colocá-lo entre aspas simples.

Certamente, ao executar em um Dockerfile, tive que usar aspas simples:

# 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

Apenas no caso de alguém ter o mesmo problema que eu, faltava "/" antes de um dos argumentos "/ p". Não é muito claro na descrição. Espero que isso ajude alguém.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.