Určení událostí sestavení (C#)

Události sestavení slouží k určení příkazů, které se spustí před spuštěním sestavení nebo po dokončení sestavení.

Zadání události sestavení

  1. V Průzkumník řešení vyberte projekt, pro který chcete zadat událost sestavení.

  2. V nabídce Projekt klepněte na příkaz Vlastnosti.

  3. Vyberte kartu Události sestavení.

  4. Do pole příkazového řádku události před sestavením zadejte syntaxi události sestavení.

    Poznámka:

    Události před sestavením se nespustí, pokud je projekt aktuální a neaktivuje se žádné sestavení.

  5. Do pole příkazového řádku události po sestavení zadejte syntaxi události sestavení.

    Poznámka:

    call Před všechny příkazy po sestavení, které spouští .bat soubory, přidejte příkaz. Například call MyFile.bat nebo call MyFile.bat call MyFile2.bat. Cesty můžou být absolutní nebo relativní ke složce projektu.

  6. V poli Spustit událost po sestavení zadejte, za jakých podmínek se má událost po sestavení spustit.

    Poznámka:

    Pokud chcete přidat dlouhou syntaxi nebo vybrat všechna makra sestavení z dialogového okna příkazového řádku události před sestavením nebo po sestavení, kliknutím na tlačítko se třemi tečkami (...) zobrazte textové pole.

  1. V Průzkumník řešení vyberte projekt, pro který chcete zadat událost sestavení.

  2. V nabídce Project klikněte na {ProjectName} Properties (or from Průzkumník řešení, press Alt+Enter).

  3. Vyberte Události sestavení>.

    Snímek obrazovky zobrazující nastavení událostí sestavení

  4. V části Událost před sestavením zadejte syntaxi události sestavení.

    Poznámka:

    Události před sestavením se nespustí, pokud je projekt aktuální a neaktivuje se žádné sestavení.

  5. V části Události po sestavení zadejte syntaxi události sestavení.

    Poznámka:

    call Před všechny příkazy po sestavení, které spouští .bat soubory, přidejte příkaz. Například call MyFile.bat nebo call MyFile.bat call MyFile2.bat. Cesty můžou být absolutní nebo relativní ke složce projektu.

  6. V části Kdy spustit událost po sestavení určete, za jakých podmínek se má událost po sestavení spustit.

Vytvoření příkazů události sestavení

Příkazy události sestavení můžou obsahovat libovolný příkaz, který je platný na příkazovém řádku nebo v souboru .bat . Dostupné příkazy jsou popsané v referenčních informacích k příkazům systému Windows. Název dávkového souboru by měl předcházet call , aby se zajistilo, že se spustí všechny následné příkazy. Samotný dávkový soubor se spouští z výstupní složky, bin/Debugnapříklad . Pokud potřebujete stejný dávkový soubor pro všechny konfigurace, můžete ho umístit do stejné složky jako soubor projektu a použít k němu relativní cestu, call ../../prebuild.batnapříklad .

Skripty PowerShellu můžete spustit zadáním příkazu, například PowerShell MyPowerShellScript.ps1. Cesta ke skriptu PowerShellu může být absolutní nebo relativní vzhledem k adresáři projektu. Abyste mohli skript spustit, musíte se ujistit, že zásady spouštění pro skripty PowerShellu ve vašem operačním systému jsou správně nastavené. Viz Informace o zásadách spouštění.

Pokud chcete použít jiné prostředí, například Bash, obecně byste použili stejnou syntaxi příkazů, jakou byste použili ke spuštění skriptu prostředí z příkazového řádku Windows. Použití prostředí třetích stran je nad rámec této dokumentace, ale weby, jako je Stack Overflow, můžou být užitečné.

V souboru projektu

Když provedete předchozí kroky, Visual Studio upraví soubor projektu přidáním PreBuild nebo PostBuild cíle a potřebným kódem MSBuild ke spuštění zadaných kroků. Můžete otevřít soubor projektu a zobrazit kroky. Úprava kroků v souboru projektu je v pořádku. Změny se zobrazí v části Události sestavení > vlastností projektu po uložení změn.

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="call prebuild.bat" />
</Target>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="call postbuild.bat" />
</Target>

Element Exec odkazuje na úlohu MSBuild Exec . Informace o dalších parametrech, které můžete použít k přizpůsobení provádění, najdete v úloze Exec. Můžete například použít WorkingDirectory k nastavení složky, ze které je spustitelný soubor spuštěn. Výchozí je adresář, který obsahuje soubor projektu.

<Exec Command="call prebuild.bat" WorkingDirectory="$(OutDir)">

Můžete použít vlastnosti nástroje MSBuild (makra), například OutDir v předchozím příkladu, jak je popsáno dále v tomto článku na webu Makra.

Chyby a další výstup

Výstup událostí sestavení se zapíše do části Sestavení okna Výstup. Otevřete ho tak, že zvolíte Zobrazit>další okna, okno Výstup nebo stisknete kombinaci kláves Ctrl+Alt+O. V rozevíracím seznamu vedle položky Zobrazit výstup zvolte Sestavit.

Pokud se událost před sestavením nebo po sestavení úspěšně nedokončí, můžete sestavení ukončit tak, že akci události ukončíte jiným kódem než nulou (0). Nulový ukončovací kód označuje úspěšnou akci; jakýkoli jiný ukončovací kód se považuje za chybu.

Pokud se událost před sestavením nezdaří, může se v okně Seznam chyb zobrazit chyba podobná této:

MSB3073    The command "call c:\source\repos\prebuild.bat" exited with code 1.

Pokud v okně Seznam chyb není dostatek informací, můžete zkusit zobrazit úplný výstup sestavení, včetně výstupu z dávkových souborů.

Tip

Okno Seznam chyb je omezeno pouze na jeden řádek výstupu, první řádek, který jste zadali pro událost. Pokud je pro vás výstup okna Seznam chyb důležitý, vyhněte se vložení více než jednoho řádku do události. Vytvořte dávkový soubor z příkazového řádku Windows nebo v operačním systému a pak ho jednoduše použijte call mybatchfile.bat pro událost. Zahrňte příkazy do samotného dávkového souboru.

Pokyny k příkazům, které můžete použít v dávkových souborech, najdete v tématu Příkazy systému Windows.

Makra

Běžně dostupné "makra" (ve skutečnosti vlastnosti NÁSTROJE MSBuild) jsou uvedeny na společných vlastnostech nástroje MSBuild. Pro projekty sady .NET SDK (.NET Core nebo .NET 5 a novější) jsou uvedeny další vlastnosti ve vlastnostech NÁSTROJE MSBuild pro Microsoft.NET.Sdk.

Ve skriptech pro události sestavení můžete chtít odkazovat na hodnoty některých proměnných na úrovni projektu, jako je název projektu nebo umístění výstupní složky. V předchozíchverzích Ekvivalentem maker v posledních verzích sady Visual Studio jsou vlastnosti NÁSTROJE MSBuild. MSBuild je modul sestavení, který Sada Visual Studio používá ke zpracování souboru projektu při provádění sestavení. Událost sestavení v integrovaném vývojovém prostředí má za následek cíl MSBuild v souboru projektu. Můžete použít libovolnou vlastnost MSBuild, která je k dispozici v cíli v souboru projektu (například $(OutDir) nebo $(Configuration)) . Vlastnosti NÁSTROJE MSBuild, které jsou k dispozici v těchto událostech, závisí na souborech implicitně nebo explicitně importovaných v souboru projektu, takových .props a .targets souborů a vlastností nastavených v souboru projektu, například v PropertyGroup elementech. Dávejte pozor, abyste použili přesný pravopis jednotlivých vlastností. Není hlášena žádná chyba, pokud chybně zadáte vlastnost; Místo toho se nedefinovaná vlastnost vyhodnotí jako prázdný řetězec.

Předpokládejme například, že zadáte událost před sestavením následujícím způsobem:

Snímek obrazovky znázorňující příklad události před sestavením

Tato událost před sestavením má za následek následující položku, která se nazývá Target v souboru projektu:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Configuration: $(Configuration)&#xD;&#xA;echo DevEnvDir: $(DevEnvDir)&#xD;&#xA;echo OutDir: $(OutDir)&#xD;&#xA;echo ProjectDir: $(ProjectDir)&#xD;&#xA;echo VisualStudioVersion: $(VisualStudioVersion)&#xD;&#xA;echo AssemblySearchPaths: $(AssemblySearchPaths)&#xD;&#xA;echo AssemblyName: $(AssemblyName)&#xD;&#xA;echo BaseIntermediateOutputPath: $(BaseIntermediateOutputPath)&#xD;&#xA;echo CscToolPath: $(CscToolPath)" />
  </Target>

Událost sestavení se zobrazí jako cíl, který obsahuje Exec úkol se vstupem, který jste zadali jako .Command Newlines are encoded in the XML.

Když projekt sestavíte v tomto příkladu, událost před sestavením vytiskne hodnoty některých vlastností. V tomto příkladu nevygeneruje žádný výstup, $(CscToolPath) protože není definován. Jedná se o volitelnou vlastnost, kterou můžete definovat v souboru projektu, aby se dala cesta k přizpůsobené instanci kompilátoru jazyka C# (například pokud jste testovali jinou verzi csc.exe nebo experimentální kompilátor).

Výstup událostí sestavení se zapíše do výstupu sestavení, který najdete v okně Výstup . V rozevíracím seznamu Zobrazit výstup zvolte Sestavit.

Build started...
1>------ Build started: Project: ConsoleApp4, Configuration: Debug Any CPU ------
1>You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
1>Configuration: Debug
1>DevEnvDir: C:\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\
1>OutDir: bin\Debug\net6.0\
1>ProjectDir: C:\source\repos\ConsoleApp4\ConsoleApp4\
1>VisualStudioVersion: 17.0
1>ALToolsPath:
1>AssemblySearchPaths: {CandidateAssemblyFiles};{HintPathFromItem};{TargetFrameworkDirectory};{RawFileName}
1>AssemblyName: ConsoleApp4
1>BaseIntermediateOutputPath: obj\
1>CscToolsPath:
1>Skipping analyzers to speed up the build. You can execute 'Build' or 'Rebuild' command to run analyzers.
1>ConsoleApp4 -> C:\source\repos\ConsoleApp4\ConsoleApp4\bin\Debug\net6.0\ConsoleApp4.dll

Poznámka:

Některé scénáře vyžadují složitější akce sestavení, než jsou události sestavení schopné. Například v mnoha běžných scénářích generování kódu potřebujete zpracovat operace čištění a opětovného sestavení a můžete chtít povolit přírůstkové sestavení pro kroky generování kódu, aby se krok spustil pouze v případě, že je výstup zastaralý s ohledem na vstupy. Nástroj MSBuild je navržen tak, aby inteligentně zpracovával všechny tyto scénáře. Zvažte vytvoření vlastního cíle, který určuje AfterTargets nebo BeforeTargets se má spustit během konkrétního bodu procesu sestavení, a pro další kontrolu v pokročilých scénářích zvažte vytvoření vlastní úlohy nebo si projděte různé způsoby přizpůsobení sestavení.

Příklad

  1. Ve složce projektu vytvořte dávkový soubor postbuild.bat s následujícím obsahem:

    echo Copying output file %1 to %1.copy
    copy %1 %1.copy
    

    Vzpomeňte si, %1 že v dávkovém souboru odkazuje na první argument předaný.

  2. Volání dávkového souboru v části události Post-build vlastností projektu a předání argumentu pomocí vlastnosti $(TargetPath)MSBuild .

    call postbuild.bat $(TargetPath)
    
  3. Sestavte projekt a zkontrolujte výstupní složku. Měl by se zobrazit zkopírovaný soubor vedle sestaveného sestavení. V okně Výstup v části Sestavení by se měl zobrazit výstup dávkového souboru:

    1>Output file is C:\source\repos\ConsoleApp-BuildEvents\ConsoleApp-BuildEvents\bin\Debug\net6.0\ConsoleApp-BuildEvents.dll
    1>        1 file(s) copied.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    ========== Build started at 12:00 PM and took 00.723 seconds ==========