MSBUILD: помилка MSB1008: Можна вказати лише один проект


116

Чому я отримую таку помилку побудови?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Code \ EduBenesysNET \ EduBenesysNET \ EduBenesysNET.vbproj / t: публікувати / p: Конфігурація = Випуск / p: Платформа = AnyCPU / v: детально / 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 =" Загальний тест на освіту "/ 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]
Авторські права (C) Microsoft Corporation 2007. Всі права захищені.

MSBUILD: помилка MSB1008: Можна вказати лише один проект.
Перемикач: Освіта

Для синтаксису комутатора введіть "MSBuild / help"

Я не бачу, як конкретизується другий проект.
Чи він десь зберігається у файлі проекту?


4
Сама ж команда працює в powershell, але не в cmd.exe ... схоже, ви десь б'єте просторову послідовність символів ...
Cédric 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
Це дуже дивно. У моєму випадку я отримав таку ж помилку, але проблема полягає в тому, що у мене був без котирування шлях з пробілом. Додавання лапок вирішило проблему.
Марк Арнотт

У мене була та сама проблема, що і в @MarkArnott, вона не працювала з пробілами або з уникнутими просторами, але цитування це зробило.
Zitrax

7
Ймовірно, останнім зворотним нахилом на вашому шляху був уникнути заключної подвійної цитати. Якщо це правильно, то вам не потрібно було видаляти подвійні лапки, а натомість вам потрібно було уникати зворотних нахилів.
Карл Г

2
Пам'ятайте, що пробіли в режимі dir потрібно
уникати

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
Уникайте пробілу в папці, щоб позбутися цієї проблеми.
Гопінат

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. Що може бути проблемою?
Невін Радж Віктор

@NevinRajVictor Дуже пізно, але, напевно, варто поставити цитатиDefault WebSite/New
Anderson Pimentel

11

Потрібно поставити qoutes навколо шляху та імені файлу.
Тому використовуйте MSBuild "C: \ Ім'я шляху \ Ім'я файлу. Exx" / [Параметри]


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" (зазвичай його копію)

Не вдасться зі звичайною помилкою, що пояснює себе: "MSBUILD: помилка MSB1008: Можна вказати лише один проект. Переключення: Діяльність"

Звичайно, десь у шаблоні TFS за замовчуванням деякі "відсутні, тому msbuild отримає як параметр не уникнутий каталог, що містить пробіли, і це призведе до декількох проектів (?!)

Тому НІКОЛИ не використовуйте пробілів у ваших іменах TFS Build Definition, досить сумних і простих одночасно


1
Ця відповідь може використати прибирання. Дуже важко слідувати.
theMayer

1
Суть про те, що ніколи не використовувати пробіли у своїх іменах визначення TFS Build Definition, є хорошим! Це мене кілька разів спіймало.
Валентейн

3

Коли я отримав помилку, я використовував окремі лапки навколо параметра пароля

/p:password='my secret' поганий

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

/p:password="my secret" добре

Ймовірно, те саме стосується будь-якого параметра, який потребує лапок для значень, що містять пробіл.


3

Для мене я забув додати заключну пропозицію

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

до

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


Мені також не вистачало закриття подвійних цитат.
Хабіб

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. Зверніть увагу на кількість косої риски.

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


1

Якщо ви використовуєте робочу область за замовчуванням у Jenkins, це може статися. Використовуйте спеціальне розташування робочої області без пробілів.

введіть тут опис зображення


1

Якщо ви використовуєте MSBuildзавдання Azure DevOps, помилка може бути викликана подвоєним прапором конфігурації. Будь ласка, переконайтеся, що ви поставили $(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". Не дуже зрозуміло з опису. Я сподіваюся, що це комусь допоможе.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.