#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, поэтому я никогда не собирался получать это самостоятельно!