MSBUILD: ошибка MSB1008: можно указать только один проект


почему я получаю следующую ошибку построения?

C:WINDOWSMicrosoft.NETFrameworkv3.5msbuild.exe C:CodeEduBenesysNETEduBenesysNETEduBenesysNET.vbproj /t:publish /p:Configuration=Release /p:Platform=AnyCPU /v:detailed /p:PublishDir="BSIIS3c$DATAWEBSITESbenesys.netbenesys.netTotalEducationTest"  /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"

Я не вижу, как указывается второй проект.
Он хранится в файле проекта где-то?

13 76

13 ответов:

оказывается, конечная косая черта в свойстве PublishDir экранирует конечную цитату. Побег от косой черты решил мою проблему.

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

таким образом, мы можем использовать кавычки для путей, которые имеют пробелы в свойствах, что MSBuild требует Слэша.

Я знаю, это старый пост, но я чувствую, что мне нужно поделиться этим с кем-то :-)

решение
Удалите кавычки вокруг параметра /p: PublishDir

т. е.
Вместо кавычек

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

Не используйте кавычки

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

мне жаль, что я не опубликовал свою находку раньше. Я действительно должен был исследовать снова, чтобы увидеть, что нужно изменить. Кто бы мог подумать, что удаление кавычек сработает? Я обнаружил это при просмотре сборки коллег для другого решения и заметил, что у него нет двойные кавычки.

эта проблема возникает, когда у вас есть путь или свойство, содержащее пробел, и это не в кавычках.

все ваши свойства и путь имеют цитату вокруг них, это странно. Сообщение об ошибке указывает Education в качестве переключателя, попробуйте удалить /p:ProductName="Total Education TEST" чтобы увидеть, если он работает.

вам нужно поместить qoutes вокруг пути и имени файла.
Так что используйте MSBuild "C:\Path Имя\Имя Файла.Exe-Файла" /[Опции]

Попробуйте удалить заднюю косую черту или косую черту в конце пути публикации и установить url

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

Вы, должно быть, особая последовательность символов \" и (или) /", но я не знаю достаточно в cmd.exe, чтобы выяснить.

Я лично всегда использую Powershell : это более дружелюбный и мощный!

надеюсь, что это помогает!

в vs2012 просто попробуйте создать определение сборки "тестовая сборка", используя шаблон TFS по умолчанию " DefaultTemplate....xaml " (обычно его копия)

Он будет не с обычными самостоятельного объяснения-ошибка: "в MSBuild : ошибка MSB1008: только один проект может быть указан.Переключатель: Деятельность"

Off конечно где-то в шаблоне TFS по умолчанию некоторые " отсутствуют, поэтому msbuild получит в качестве параметра не экранированный каталог, содержащий пробелы, поэтому приведет к нескольким проекты(?!)

поэтому никогда не используйте пробелы в именах определений сборки TFS, довольно грустные и простые в то же время

на Git Bash мне пришлось указать параметры с двойными косыми чертами, такими как:

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

Это сработало для меня в аргументе TFS MSBuild. Обратите внимание на количество косых черт.

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

я использовал одинарные кавычки вокруг параметра пароля, когда я получил ошибку

/p:password='my secret' плохо

и изменил его, чтобы использовать двойные кавычки, чтобы решить проблему.

/p:password="my secret" хороший

вероятно, то же самое будет применяться к любому параметру, который нуждается в кавычках для значений, содержащих пробел.

для меня я забыл добавить заключительную цитату

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

до

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

на всякий случай, если у кого-то есть такая же проблема, как у меня, я пропустил "/" перед одним из аргументов "/p". Не очень понятно из описания. Надеюсь, это кому-то поможет.

для будущих читателей.

Я получил эту ошибку, потому что мой указанный файл журнала был пробел в нем:

перед:

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

Если вы используете рабочее пространство по умолчанию в Jenkins, это может произойти. Используйте пользовательское расположение рабочей области без пробелов.

enter image description here