Integrace sady Visual Studio (MSBuild)

Visual Studio hostuje MSBuild k načítání a sestavování spravovaných projektů. Vzhledem k tomu, že msBuild je zodpovědný za projekt, může být téměř jakýkoli projekt ve formátu MSBuild úspěšně použit v sadě Visual Studio, i když byl projekt vytvořený jiným nástrojem a má přizpůsobený proces sestavení.

Tento článek popisuje konkrétní aspekty hostování nástroje MSBuild sady Visual Studio, které by se měly zvážit při přizpůsobení projektů a souborů .targets , které chcete načíst a sestavit v sadě Visual Studio. Pomůže vám to zajistit, aby funkce sady Visual Studio, jako je IntelliSense, a ladění fungovaly pro váš vlastní projekt.

Informace o projektech C++ naleznete v tématu Soubory projektu.

Přípony názvů souborů projektu

MSBuild.exe rozpozná jakoukoli příponu názvu projektu odpovídající vzoru .*proj. Visual Studio však rozpozná pouze podmnožinu těchto přípon názvů souborů projektu, která určí systém projektu specifický pro jazyk, který projekt načte. Visual Studio nemá systém projektů založený na jazykově neutrálním nástroji MSBuild.

Například systém projektu C# načte soubory .csproj , ale Visual Studio nemůže načíst soubor .xxproj . Soubor projektu pro zdrojové soubory v libovolném jazyce musí používat stejnou příponu jako soubory projektu jazyka Visual Basic nebo C#, které se mají načíst v sadě Visual Studio.

Alternativně je podporováno rozšíření *.msbuildproj.

Známé cílové názvy

Kliknutím na příkaz Sestavení v sadě Visual Studio se v projektu spustí výchozí cíl. Tento cíl je často také pojmenován Build. Když zvolíte příkaz Znovu sestavit nebo vyčistit , pokusí se v projektu spustit cíl se stejným názvem. Kliknutím na Publikovat spustíte cíl pojmenovaný PublishOnly v projektu.

Konfigurace a platformy

Konfigurace jsou reprezentovány v projektech MSBuild vlastnostmi seskupenými v elementu PropertyGroup , který obsahuje Condition atribut. Visual Studio tyto podmínky sleduje, aby se vytvořil seznam konfigurací a platforem projektu, které se mají zobrazit. K úspěšnému extrahování tohoto seznamu musí mít podmínky formát podobný následujícímu:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' " 
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "

Visual Studio pro tento účel sleduje podmínky pro PropertyGroup, ItemGroup, Import, vlastnosti a prvky položek.

Další operace sestavení

Visual Studio umožňuje změnit název typu položky souboru v projektu s vlastností Akce sestavení okna Vlastnosti souboru . V této nabídce jsou vždy uvedeny názvy typů položek Compile, EmbeddedResource, Content a None spolu se všemi ostatními názvy typů položek, které už jsou ve vašem projektu. Chcete-li zajistit, aby byly názvy vlastních typů položek vždy k dispozici v této nabídce, můžete přidat názvy do typu položky s názvem AvailableItemName. Například přidáním následujícího do souboru projektu přidáte do této nabídky vlastní typ JScript pro všechny projekty, které ho naimportuje:

<ItemGroup>
    <AvailableItemName Include="JScript"/>
</ItemGroup>

Přidání názvů typů položek do AvailableItemName typu položky způsobí, že se položky tohoto typu zobrazí v Průzkumníku řešení.

Poznámka:

Některé názvy typů položek jsou pro Visual Studio speciální, ale nejsou uvedené v tomto rozevíracím seznamu.

Kompilátory v procesu

Pokud je to možné, visual Studio se pokusí použít verzi kompilátoru jazyka Visual Basic v procesu pro zvýšení výkonu. (Nelze použít pro jazyk C#.) Aby to fungovalo správně, musí být splněny následující podmínky:

  • V cíli projektu musí být úkol pojmenovaný Vbc pro projekty jazyka Visual Basic.

  • Parametr UseHostCompilerIfAvailable úkolu musí být nastaven na hodnotu true.

IntelliSense v době návrhu

Abychom získali podporu IntelliSense ve Visual Studiu před tím, než bylo vygenerováno výstupní sestavení, musí být splněny následující podmínky:

  • Musí existovat cíl s názvem Compile.

  • Compile Cíl nebo jedna z jeho závislostí musí volat úlohu překladače pro projekt, například Csc nebo Vbc.

  • Compile Cíl nebo jedna z jeho závislostí musí zajistit, aby kompilátor získal všechny nezbytné parametry pro IntelliSense, zejména všechny reference.

  • Podmínky uvedené v části Kompilátory procesu musí být splněny .

Sestavování řešení

V prostředí Visual Studio jsou soubor řešení a pořadí sestavení projektu řízeny samotným Visual Studio. Při vytváření řešení s msbuild.exe na příkazovém řádku nástroj MSBuild parsuje soubor řešení a objedná sestavení projektu. V obou případech jsou projekty sestaveny jednotlivě podle pořadí závislostí a odkazy mezi projekty nejsou procházeny. Při sestavování jednotlivých projektů pomocí msbuild.exe se projekt na projekt odkazy procházejí.

Při sestavování uvnitř sady Visual Studio je vlastnost $(BuildingInsideVisualStudio) nastavena na true. Toto lze použít ve vašem projektu nebo v souborech .targets k dosažení odlišného chování při sestavování.

Zobrazení vlastností a položek

Visual Studio rozpozná určité názvy a hodnoty vlastností. Například následující vlastnost v projektu způsobí, že aplikace systému Windows se zobrazí v poli Typ aplikace v Návrháři projektu.

<OutputType>WinExe</OutputType>

Hodnotu vlastnosti lze upravit v Návrháři projektu a uložit do souboru projektu. Pokud je taková vlastnost ručně upravena neplatnou hodnotou, zobrazí Visual Studio při načtení projektu upozornění a nahradí neplatnou hodnotu výchozí hodnotou.

Visual Studio rozumí výchozím nastavením některých vlastností. Tyto vlastnosti nebudou zachovány v souboru projektu, pokud nemají jiné než výchozí hodnoty.

Vlastnosti s libovolnými názvy se v sadě Visual Studio nezobrazují. Chcete-li upravit libovolné vlastnosti v sadě Visual Studio, musíte otevřít soubor projektu v editoru XML a upravit je ručně. Další informace najdete v části Upravit soubory projektu v sadě Visual Studio dále v tomto tématu.

Položky definované v projektu s libovolnými názvy typů položek se ve výchozím nastavení zobrazují v Průzkumníku řešení pod uzlem projektu. Chcete-li skrýt položku ze zobrazení, nastavte Visible metadata na false. Například následující položka se bude účastnit procesu sestavení, ale nebude zobrazena v Průzkumníku řešení.

<ItemGroup>
    <IntermediateFile Include="cache.temp">
        <Visible>false</Visible>
    </IntermediateFile>
</ItemGroup>

Poznámka:

Metadata Visible jsou ignorována Průzkumníkem řešení pro projekty C++. Položky se vždy zobrazí i v případě, že Visible je nastavená hodnota false.

Položky deklarované v souborech importovaných do projektu se ve výchozím nastavení nezobrazují. Položky vytvořené během procesu sestavení se v Průzkumníku řešení nikdy nezobrazí.

Podmínky pro položky a vlastnosti

Během sestavení jsou všechny podmínky plně dodrženy.

Při určování hodnot vlastností, které se mají zobrazit, se vlastnosti, které Sada Visual Studio považuje za závislé na konfiguraci, vyhodnotí jinak než vlastnosti, které považuje za nezávislé na konfiguraci. U vlastností, které považuje za závislé na konfiguraci, sada Visual Studio správně nastaví Configuration a Platform vlastnosti a dá nástroji MSBuild pokyn, aby projekt znovu vyhodnotil. U vlastností, které považuje konfiguraci za nezávislou, je neurčité, jak budou podmínky vyhodnoceny.

Podmíněné výrazy u položek se vždy ignorují pro účely rozhodování, jestli se má položka zobrazit v Průzkumníku řešení.

Odstraňování chyb

Aby bylo možné najít a spustit výstupní sestavení a připojit ladicí program, visual Studio potřebuje vlastnosti OutputPath, AssemblyNamea OutputType správně definované. Nepodaří se připojit ladicí program, pokud sestavovací proces nezpůsobil, že by kompilátor vygeneroval soubor .pdb.

Vykonávání cíle během návrhu

Visual Studio se při načtení projektu pokusí spouštět cíle s určitými názvy. Mezi tyto cíle patří Compile, , ResolveAssemblyReferencesResolveCOMReferences, GetFrameworkPathsa CopyRunEnvironmentFiles. Visual Studio tyto cíle spouští, aby kompilátor mohl být inicializován tak, aby poskytoval IntelliSense, ladicí program lze inicializovat a odkazy zobrazené v Průzkumníku řešení je možné vyřešit. Pokud tyto cíle nejsou k dispozici, projekt se načte a sestaví správně, ale prostředí návrhu v sadě Visual Studio nebude plně funkční.

Úprava souborů projektu v sadě Visual Studio

Chcete-li upravit projekt MSBuild přímo, můžete otevřít soubor projektu v editoru VISUAL Studio XML.

Uvolnění a úprava souboru projektu v sadě Visual Studio

  1. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu a pak zvolte Uvolnit projekt.

    Projekt je označený (není k dispozici).

  2. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel nedostupného projektu a pak zvolte Upravit <soubor> projektu.

    Soubor projektu se otevře v editoru XML sady Visual Studio.

  3. Upravte, uložte a zavřete soubor projektu.

  4. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel nedostupného projektu a pak zvolte Znovu načíst projekt.

IntelliSense a ověřování

Při použití editoru XML k úpravě souborů projektu je IntelliSense a ověření řízeny soubory schématu MSBuild. Tyto soubory jsou nainstalovány v mezipaměti schémat, které lze najít v <instalačním adresáři> sady Visual Studio\Xml\Schemas\1033\MSBuild.

Základní typy MSBuild jsou definovány v Microsoft.Build.Core.xsd a běžné typy používané sadou Visual Studio jsou definovány v Microsoft.Build.CommonTypes.xsd. Chcete-li přizpůsobit schémata tak, abyste měli technologii IntelliSense a ověření názvů vlastních typů položek, vlastností a úkolů, můžete upravit microsoft.build.xsd nebo vytvořit vlastní schéma, které obsahuje schémata CommonTypes nebo Core. Pokud vytvoříte vlastní schéma, budete muset nasměrovat editor XML tak, aby ho našel pomocí okna Vlastnosti .

Úprava načtených souborů projektu

Visual Studio ukládá obsah souborů projektu a souborů importovaných soubory projektu do mezipaměti. Pokud upravíte načtený soubor projektu, Sada Visual Studio vás automaticky vyzve k opětovnému načtení projektu, aby se změny projevily. Pokud ale upravíte soubor importovaný načteným projektem, nezobrazí se výzva k opětovnému načtení a musíte projekt znovu načíst a znovu načíst ručně, aby se změny projevily.

Výstupní skupiny

Několik cílů definovaných v microsoft.Common.targets mají názvy končící na OutputGroups nebo OutputGroupDependencies. Tyto cíle Visual Studio volá, aby získalo konkrétní seznamy výstupů projektu. Například cíl SatelliteDllsProjectOutputGroup vytvoří seznam všech satelitních sestavení, která bude sestavení generovat. Tyto výstupní skupiny používají funkce, jako je publikování, nasazení a projektové odkazy. Projekty, které je nedefinují, se načtou a sestaví v sadě Visual Studio, ale některé funkce nemusí fungovat správně.

Referenční rozlišení

Řešení odkazů je proces použití referenčních položek uložených v souboru projektu pro vyhledání skutečných sestavení. Visual Studio musí aktivovat překlad odkazů, aby bylo možné zobrazit podrobné vlastnosti pro jednotlivé odkazy v okně Vlastnosti . Následující seznam popisuje tři typy odkazů a způsob jejich řešení.

  • Odkazy na sestavení:

    Systém projektu volá cíl se známým názvem ResolveAssemblyReferences. Tento cíl by měl vytvářet položky s názvem typu položky ReferencePath. Každá z těchto položek by měla mít specifikaci položky (hodnotu Include atributu položky), která obsahuje úplnou cestu k odkazu. Kromě následujících nových metadat by tyto položky měly obsahovat všechna metadata ze vstupních položek:

    • CopyLocaloznačuje, zda má být sestavení zkopírováno do výstupní složky, nastaveno na hodnotu true nebo false.

    • OriginalItemSpecobsahující původní specifikaci položky odkazu.

    • ResolvedFrom, přiřaďte hodnotu "{TargetFrameworkDirectory}", pokud byla určena ze složky rozhraní .NET Framework.

  • Odkazy modelu COM:

    Systém projektu volá cíl s dobře známým názvem ResolveCOMReferences. Tento cíl by měl vytvářet položky s názvem typu položky ComReferenceWrappers. Každá z těchto položek by měla mít specifikaci obsahující úplnou cestu k interop sestavení pro odkaz modelu COM. Položky by měly mít všechna metadata ze vstupních položek přenesených, kromě nového metadata se jménem CopyLocal, které označuje, zda má být sestavení zkopírováno do výstupní složky, nastaveno na hodnotu true nebo false.

  • Nativní odkazy

    Systém projektu volá cíl s dobře známým názvem ResolveNativeReferences. Tento cíl by měl vytvářet položky typu položky s názvem NativeReferenceFile. Položky by měly mít všechna metadata převzatá ze vstupních položek, spolu s novou částí metadat s názvem OriginalItemSpec, která obsahuje původní specifikaci referenční položky.

Zkratky pro zvýšení výkonu

Pokud ke spuštění ladění použijete integrované vývojové prostředí sady Visual Studio (buď zvolením klávesy F5, nebo zvolením tlačítka Spustit>ladění na řádku nabídek) nebo sestavením projektu (například řešení sestavení>), proces sestavení použije rychlou kontrolu aktualizace ke zlepšení výkonu. V některých případech, kdy přizpůsobené buildy vytvářejí soubory, které se následně zpracují, rychlá kontrola aktualizací nedokáže správně identifikovat změněné soubory. Projekty, které potřebují důkladnější kontrol aktualizací, mohou vypnout rychlou kontrolu nastavením proměnné prostředí DISABLEFASTUPTODATECHECK=1. Projekty můžou také nastavit tuto vlastnost jako vlastnost MSBuild v projektu nebo v souboru, který projekt importuje.