x64 build: ошибка MSB8013: этот проект не содержит комбинацию конфигурации и платформы Debug | Win32

Я пытаюсь получить чистую сборку x64 для сложной сборки со многими решениями (некоторые для CI, некоторые для разработчиков) и сотнями проектов и столкнулась с ошибкой MSB8013: этот проект не содержит комбинацию конфигурации и платформы отладки | Win32 «

Я сократил его до простой конфигурации:

  • Решение A содержит проект X & Проект Y. Проект X имеет проект
    ссылка
    к проекту Y.
  • Решение B содержит также содержит проект X.

Ни один из проектов или решений не содержит платформу Win32 — он был удален.

Когда я строю решение B (как x64), я получаю

ошибка MSB8013: этот проект не содержит конфигурацию и
Комбинация платформы Debug | Win32

Сообщение об ошибке иногда содержит дополнительную информацию:

Эта ошибка также может появиться, если какой-то другой проект пытается следовать
от проекта к проекту ссылка на этот проект, этот проект был
выгружен или не включен в решение, а ссылка
проект не строится с использованием той же или эквивалентной конфигурации
или платформа.

Проблема в ссылочном проекте делает «Сборка с использованием той же или эквивалентной конфигурации или платформы.»

Рассматривая диагностику msbuild, проект Y строится, потому что проект X содержит ссылку на проект. Но свойства конфигурации и платформы удаляются непосредственно перед сборкой проекта Y:

1>Task "MSBuild" (TaskId:28)
1>  Removing Properties: (TaskId:28)
1>    Configuration (TaskId:28)
1>    Platform (TaskId:28)

В результате Microsoft.Cpp.Default.props запускается и устанавливает для них Debug | Win32:

1>Task "Message" (TaskId:11)
1>  Configuration=Debug (TaskId:11)
1>Done executing task "Message". (TaskId:11)
1>Task "Message" (TaskId:12)
1>  Platform=Win32 (TaskId:12)
1>Done executing task "Message". (TaskId:12)

Как я могу предотвратить это и заставить msbuild пройти выбранную конфигурацию & Платформа?

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

9

Решение

Я мог бы решить аналогичную проблему, включив все упомянутые проекты в решение — в этом случае включая проект Y в решение B.

4

Другие решения

Одним из исправлений является ручное редактирование файлов .vcxproj для определения платформы по умолчанию:

  1. Откройте файл vcxproj в текстовом редакторе
  2. Добавьте эту строку в PropertyGroup «Globals»:

    <Состояние платформы = «‘$ (Платформа)’ == »»>x64</Платформа>

2

Кажется, это ошибка в Microsoft.CppBuild.targets файл. На некоторых машинах я вижу два таких файла: один в C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets размером ~ 120 КБ и C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets с размером 77 КБ. Второй — глючный и получает неправильное значение $ (Configuration) | $ (Platform), что приводит к указанной ошибке. Эта проблема, вероятно, напрямую связана с Эта тема, поскольку VCTargetsPath в моих проектах указывал на неправильный (77KB) каталог Microsoft.CppBuild.targets (я использую VS2015, поэтому он должен использовать тот из каталога V140). Я нашел два обходных пути: 1) заменить файл с ошибкой или 2) изменить HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0\VCTargetsPath10 реестр, чтобы указать правильный файл.

0

Мне трудно понять, чего ты пытаешься достичь с помощью этого. Вы всегда хотите построить X и Y? Даже в решении, которое не имеет отношения к Y? Было бы довольно нелогично для меня. Тем не менее, я могу предложить вам некоторые решения для устранения / подавления этой проблемы, основываясь на том, что вы хотите.

Если вы хотите построить X&Y с A и X с B

В решении A установите другой проект как построить зависимость, вместо ссылки на проект Y в проекте X. Вы не можете установить его, если он ссылается на другой проект (я всегда удаляю ссылку в .vcxproj, она где-то внизу проекта), но как только вы удалили Внутренняя ссылка проекта, вы можете иметь ссылку на решение, и тогда оно должно работать просто отлично.

Когда вы создаете решение A с помощью MSBuild, оно создает X и Y, а решение B — с помощью MSBuild.

еще

Если вы хотите построить X&Y с любым решением

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

0
По вопросам рекламы [email protected]