Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MSBuild высококастомизируемый и расширяемый (см. статью "Настройка сборки" для подробных сведений), поэтому следует уделить особое внимание правильной конфигурации среды и сборки.
Ограничьте доступ на запись в расположение установки
Установите MSBuild (независимо от того, используется ли Visual Studio, пакет SDK для .NET или автономный) в расположение, где только доверенные пользователи имеют доступ на запись.
Логику сборки можно изменить, изменив или добавив различные двоичные и XML-файлы, помещенные рядом с исполняемым файлом MSBuild, а также в вложенные папки исполняемого файла MSBuild. Таким образом, только доверенные пользователи должны быть разрешены для записи в папку.
Связанные конфигурации
-
MSBuildExtensionsPath и MSBuildUserExtensionsPath — в
ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}частности свойство, которое можно использовать для отказа от логики расширения.
Выполняйте сборку только на известных и проверенных вами источниках
Запустите MSBuild (для создания и восстановления проектов, а также для открытия проектов в Visual Studio) только в источниках, которым вы полностью доверяете.
Логика MSBuild может быть расширена в файлах скриптов сборки, включая файлы проекта, поэтому неизвестная логика сборки должна быть способна выполнять произвольный код в среде сборки.
Связанные конфигурации
Запустите сборку в проверенном и выделенном месте.
MSBuild может автоматически включать логику из папки проекта или решения и любой родительской папки до корневого диска. Это включает .user файлы, [before|after].{solution}.targets файлы, Directory.Build.[props|targets|rsp] файлы и другие.
Убедитесь, что только авторизованные пользователи или учетные записи имеют доступ на запись к местоположению с файлами, связанными со сборкой, и к любой папке в иерархической структуре вплоть до корня диска.
Чтобы предотвратить непреднамеренное включение Directory.Build.[props|targets|rsp], можно включить такие файлы в корневой каталог источников. Файл может быть пустым элементом MSBuild Project .
Связанные конфигурации
Узнать и пересмотреть ссылочные пакеты и исходные источники
Логика сборки может быть автоматически расширена пакетами NuGet. При восстановлении такая логика включается в процесс сборки или компиляции. Убедитесь, что вы знакомы с типами ресурсов пакета NuGet и их ролью во время сборки, компиляции и среды выполнения. В частности, ресурсы build, buildTransitive, buildMultitargeting и analyzers подключаются автоматически (и, следовательно, выполняются автоматически) во время сборки, если они не были явно исключены.
Используйте ExcludeAssets всякий раз, когда из указанного пакета не требуется логика сборки или расширения компилятора (или, что ещё лучше, только явно укажите IncludeAssets логику сборки, если она нужна).
Убедитесь, что вы знакомы с текущей документацией и руководством команды NuGet. Обратитесь к документу PackageReference в файлах проекта как к авторитетному источнику для решения этой проблемы.
Связанные конфигурации
Знание и проверка запуска скрипта и процесса сборки
Логика сборки может зависеть от аргументов командной строки или переменных среды, особенно тех, которые могут приводить к внедрению плагинов (например, пользовательских логгеров) или логики сборки (например, скриптов сборки в MSBuildUserExtensionsPath). Убедитесь, что к процессу MSBuild применяются аргументы командной строки и переменные среды. Таким образом вы сможете лучше понять, как влияет логика сборки.
Использование выделенной учетной записи пользователя и сеанса для запуска сборки
Не запускайтесь под учетной записью, которая может использоваться в той же системе для выполнения неизвестных процессов или сценариев, включая другую сборку. Особенно если несвязанная сборка в той же учетной записи пользователя может выполняться на источниках, которые не являются полностью доверенными и известными.
MSBuild может создавать логику из различных расположений из профиля пользователя (в частности, пакет SDK MSBuild автоматически включает логику сборки, расположенную в расположении MSBuildUserExtensionsPath ), или из расположений, внедряемых переменными среды (можно настроить MSBuildUserExtensionsPath с помощью свойства MSBuild с тем же именем. Такое свойство не имеет значения по умолчанию, поэтому его можно получить из переменной среды с тем же именем.
Связанные конфигурации
-
MSBuildExtensionsPath и MSBuildUserExtensionsPath: можно задать свойство
ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}значениемfalse, чтобы отказаться от автоматического включения специфической логики сборки расширений.