VS2017 Directory.Build.props не загружается для всего решения - PullRequest
1 голос
/ 15 октября 2019

ОК, вот моя проблема. У меня есть 2 библиотеки и 2 проекта, которые включают их .csproj (1 для Dev, 1 для Client Delivery).

Мне нужна определенная константа, чтобы установить доступную большую часть моего класса, когдамы с целью Dev (внутренняя -> публичная). Я использовал Directory.Build.props в каталоге моего проекта dev, который определил переменную, а мои библиотеки .csproj определяют константу, если эта переменная существует.

<PropertyGroup Condition ="$(ActiveIHMMode)=='true'">
    <DefineConstants>$(DefineConstants);DEV_IHM_MODE</DefineConstants>
</PropertyGroup>

Я вижу, что все работает хорошо для моего проекта dev, ноэто не относится к моим библиотекам (они не видят мою переменную .props)

Я предполагаю, что для этого есть простая причина, это из-за порядка компиляции зависимостей. Мой каталог Hierarchie выглядит следующим образом:

LibA
LibB
ProjectDelivery
ProjectDev

Мой LibA компилируется первым и не находит никакого Directory.Build.props, потому что мой файл находится в моем каталоге ProjectDev, но мой ProjectDev является последним элементом для компиляциинаходит его, но уже слишком поздно для моей библиотеки.

Первый раз использую .props, и я не могу найти способ ее решить. Спасибо за вашу помощь в будущем.

1 Ответ

0 голосов
/ 15 октября 2019

Прежде всего, чтобы прояснить возможную путаницу, вытекающую из вашего заголовка, автоматический импорт Directory.Build.props - это не Visual Studio 2017 , а MSBuild 15 *Функция 1007 * (которая включена в VS2019 ).

С моим придиркой, давайте разберемся с техническим:

Проблема не в вашем порядке сборки. Причина, по которой Directory.Build.props обнаруживается только в вашем проекте ProjectDev, заключается в том, что MSBuild ищет в каталоге .csproj файл с именем Directory.Build.props и импортирует его, если находит его. Если он не найден, файл ищется в родительском каталоге. И он продолжает искать Directory.Build.props в родительском каталоге, пока не достигнет корня, или он действительно найдет этот файл и затем остановится, поэтому он автоматически импортирует только первый найденный Directory.Build.props.

Структура вашего проектакак описано выше, выглядит следующим образом:

/LibA/
/LibA/LibA.csproj

/LibB/
/LibB/LibB.csproj

/ProjectDelivery/
/ProjectDelivery/ProjectDelivery.csproj

/ProjectDev/
/ProjectDev/ProjectDev.csproj
/ProjectDev/Directory.Build.props

Только ProjectDev автоматически получает Directory.Build.props;ни один из других проектов не имеет Directory.Build.props ни в своих каталогах, ни в своих родительских каталогах.

Чтобы устранить проблему, вы можете переместить папку Directory.Build.props на одну вверх, чтобы она автоматически импортироваласьвсеми вашими проектами, или вы можете импортировать Directory.Build.props вручную, добавив элемент Import к вашему .csproj:

<Project>
  <Import Project="..\ProjectDev\Directory.Build.props" />
</Project>

. Вы можете прочитать более подробную информацию о Directory.Build.props в документации .

...