Игнорировать / отключать переменные среды в MSBuild

#msbuild

#msbuild

Вопрос:

Я пытаюсь настроить MSBuild таким образом, чтобы он игнорировал переменные среды (чтобы обеспечить полный контроль над процессом сборки независимо от компьютера). Я знаю, что Microsoft SQLCMD способна на это, однако я проверил ссылку на MSDN для вызова MSBuild и не вижу сопоставимой опции.

Можно ли указать MSBuild игнорировать переменные среды, и если да, то как?

Комментарии:

1. Вы говорите, что у вас есть проект MSBuild, который будет правильно построен, если MSBuild был запущен с пустым блоком среды, и хотите предотвратить возможность его неправильного построения или по-другому, когда блок среды не пуст?

2. Я говорю, что, насколько я понимаю, можно установить переменные msbuild (например, $ (configuration)) с помощью переменных среды, и это также возможно сделать непреднамеренно. Итак, я хотел бы что-то вроде переключателя -X в SQLCMD, который отделяет переменные и поведение ваших сценариев от среды. И да, это делается ради максимального детерминизма моих сборок.

3. Вы можете запустить любой процесс с пустой средой ( CreateProcess ). Но это немного сложнее, чем это. Для моего MSBuild (14 в Windows) требуется, чтобы в среде были установлены SystemDrive и SystemRoot. Затем он создает около 3 десятков свойств, в основном из реестра Windows. И это без каких-либо элементов импорта и / или задач, которые также могут потребоваться или пытаться прочитать среду и реестр. Возможно, удаленные сборки в контейнере Docker дадут вам желаемую степень контроля..

4. Спасибо за предложение, это может быть хорошим обходным путем, если этот запрос функции в ответе Мартина Ульриха не будет реализован.

Ответ №1:

На момент написания (MSBuild 16.0) еще не было способа отказаться от использования переменных среды.

Запрос функции отслеживается на GitHub: # 2713 Долгосрочные усилия по удалению переменных среды (для воспроизводимых сборок)

Комментарии:

1. Спасибо — мой текущий клиент блокирует github, поэтому я никогда не собирался получать это самостоятельно!