Osvědčené postupy použití nástroje MSBuild

NÁSTROJ MSBuild je vysoce přizpůsobitelný a rozšiřitelný (viz Přizpůsobení sestavení pro podrobnosti), takže zvláštní péče by měla být placena správné konfiguraci prostředí a sestavení.

Omezení přístupu k zápisu do umístění instalace

Nainstalujte nástroj MSBuild (bez ohledu na to, jestli se používá Visual Studio, sada .NET SDK nebo samostatná sada) do umístění, kde mají přístup k zápisu jenom důvěryhodní uživatelé.

Logiku sestavení můžete změnit změnou nebo přidáním různých binárních souborů a souborů XML umístěných vedle spustitelného souboru MSBuild a podsložek spustitelného souboru MSBuild. Proto by do složky měli být povoleni pouze důvěryhodní uživatelé.

Spusťte sestavení pouze na zdrojích, které znáte a kontrolujete.

Spusťte nástroj MSBuild (pro sestavování a obnovování projektů, ale také pro otevírání projektů v Visual Studio) pouze na zdrojích, kterým plně důvěřujete.

Logiku NÁSTROJE MSBuild je možné rozšířit v souborech skriptu sestavení, včetně souborů projektu, takže neznámá logika sestavení by měla být považována za schopnou spustit libovolný kód v prostředí sestavení.

Spuštění sestavení v ověřeném vyhrazeném umístění

Nástroj MSBuild může automaticky zahrnovat logiku ze složky projektu nebo řešení a všechny nadřazené složky až do kořenového adresáře jednotky. To zahrnuje .user soubory, [before|after].{solution}.targets soubory, Directory.Build.[props|targets|rsp] soubory a další.

Ujistěte se, že oprávnění uživatelé nebo účty mají přístup k zápisu do umístění se soubory souvisejícími s sestavením a všechny složky v hierarchické struktuře až do kořenového adresáře jednotky.

Chcete-li zabránit nezamýšleným zahrnutím Directory.Build.[props|targets|rsp], můžete tyto soubory zahrnout do kořenového adresáře vašich zdrojů. Soubor může být prázdný element MSBuild Project .

Znalost a kontrola odkazovaných balíčků a pocházejících informačních kanálů

Logiku sestavení můžou automaticky rozšířit balíčky NuGet. Tato logika se provádí při obnovení, která zahrnuje logiku do spuštění sestavení nebo kompilace. Ujistěte se, že jste obeznámeni s typy prostředků balíčku NuGet a jejich rolí během sestavování, kompilace a modulu runtime. buildKonkrétně , buildTransitivebuildMultitargeting a analyzers prostředky jsou automaticky zapojeny (a tak automaticky spouštěny během) sestavení, pokud nejsou explicitně odhlasovány.

Použijte ExcludeAssets vždy, když nepotřebujete logiku rozšíření sestavení nebo kompilátoru z odkazovaného balíčku (nebo ještě lépe, pouze explicitně IncludeAssets logiku sestavení, pokud ji chcete).

Ujistěte se, že znáte aktuální dokumentaci a pokyny od týmu NuGet. Pro tento problém se podívejte na PackageReference dokument v souborech projektu jako autoritativní zdroj.

Znalost a kontrola spouštěcího skriptu nebo procesu sestavení

Logiku sestavení můžou ovlivnit argumenty příkazového řádku nebo proměnné prostředí, zejména ty, které můžou vést k injektáži modulů plug-in (například vlastních protokolovacích modulů) nebo logiky sestavení (například skripty sestavení).MSBuildUserExtensionsPath Ujistěte se, že víte, jaké argumenty příkazového řádku a proměnné prostředí se použijí pro proces MSBuild. Tímto způsobem lépe pochopíte, jak je ovlivněna logika sestavení.

Použití vyhrazeného uživatelského účtu a relace ke spuštění sestavení

Nespouštět pod účtem, který by se dal použít ve stejném systému k dřívějšímu spuštění neznámých procesů nebo skriptů, včetně jiného sestavení. Zvláště pokud nesouvisející sestavení pod stejným uživatelským účtem mohlo běžet na zdrojích, které nejsou plně důvěryhodné a známé.

Nástroj MSBuild může zdrojovou logiku z různých umístění z profilu uživatele (konkrétně sada MSBuild SDK automaticky obsahuje logiku sestavení umístěnou v umístění MSBuildUserExtensionsPath ) nebo z umístění vložených proměnnými prostředí (můžete přizpůsobit MSBuildUserExtensionsPath pomocí vlastnosti MSBuild se stejným názvem. Tato vlastnost nemá výchozí hodnotu, takže ji lze zdrojovat z proměnné prostředí se stejným názvem).

Poznámka:

Jako podrobnosti implementace nástroj MSBuild vyhledá a komunikuje s jeho trvalými procesy prostřednictvím pojmenovaných kanálů a mutexů. V Windows tyto pojmenované kanály a mutexy sdílejí obor názvů pro celý počítač. Proces pod jiným místním účtem tedy může tyto názvy zabírat a blokovat jejich vytvoření sestavení. Tato situace se týká pouze dostupnosti (odepření služby). Řízení přístupu k operačnímu systému stále brání jinému účtu ve čtení nebo změně sestavení. Preferujte počítač, ve kterém jsou všechny místní účty důvěryhodné nebo izolované relace, kontejner nebo virtuální počítač.