Megosztás a következőn keresztül:


Építési események megadása (C#)

A buildesemények használatával megadhatja a build indítása vagy befejezése után futó parancsokat.

Build esemény megadása

  1. A(z) Megoldáskezelőbenválassza ki a projektet, amelyhez meg szeretné adni a build eseményt.

  2. A Project menüjében kattintson a {ProjectName} Tulajdonságok (vagy Megoldáskezelő, nyomja le Alt+Enter).

  3. Válassza >-eseményeklétrehozása lehetőséget.

    Képernyőkép a Build Events beállításairól.

  4. A Build előtti esemény szakaszban adja meg a buildesemény szintaxisát.

    Jegyzet

    Az előzetes build események nem futnak, ha a projekt naprakész, és nem aktiválódik egy build.

  5. A Build utáni esemény szakaszban adja meg a buildesemény szintaxisát.

    Jegyzet

    Adjon hozzá egy call utasítást a .bat fájlokat futtató összes összeállítás utáni parancs elé. Például call MyFile.bat vagy call MyFile.bat call MyFile2.bat. Az elérési utak lehetnek abszolútak vagy a kimeneti mappához viszonyítva.

  6. A Mikor fusson le a build utáni esemény? szakaszban határozza meg, hogy milyen feltételek mellett kerüljön végrehajtásra ez a folyamat.

A buildelési eseményparancsok létrehozása

A buildesemény-parancsok tartalmazhatnak minden olyan parancsot, amely egy parancssorban vagy egy .bat fájlban érvényes. Az elérhető parancsok a Windows parancsreferenciábandokumentálva vannak. A kötegfájl nevét call kell megelőznie, hogy az összes további parancs végrehajtásra kerüljön. Maga a kötegfájl a kimeneti mappából fut, például bin/Debug. Ha minden konfigurációhoz ugyanarra a kötegfájlra van szüksége, ugyanabba a mappába helyezheti, mint a projektfájl, és használhatja annak relatív elérési útját, például call ../../prebuild.bat.

PowerShell--szkripteket egy olyan parancs megadásával hajthatja végre, mint PowerShell MyPowerShellScript.ps1. A PowerShell-szkript elérési útja lehet abszolút, vagy viszonylagos a projektkönyvtárhoz képest. A szkript futtatásához meg kell győződnie arról, hogy a PowerShell-szkriptek végrehajtási szabályzata megfelelően van beállítva az operációs rendszeren. Lásd: A végrehajtási szabályzatok.

Ha egy másik rendszerhéjat, például a basht szeretne használni, akkor általában ugyanazt a parancsszintaxist alkalmazza, mint amit egy rendszerhéjszkript Windows parancssorral való elindításához használnak. A külső rendszerhéjak használata túlmutat a dokumentáció hatókörén, de az olyan webhelyek, mint a Stack Overflow hasznos lehet.

A projektfájlban

Az előző lépések végrehajtásakor a Visual Studio úgy módosítja a projektfájlt, hogy hozzáadja a PreBuild vagy PostBuild célt, valamint a szükséges MSBuild kódot a megadott lépések végrehajtásához. Megnyithatja a projektfájlt, és megtekintheti a lépéseket. A projektfájl lépéseinek módosítása rendben van. A módosítások mentése után a projekt tulajdonságai közül a Build > Events szakaszban láthatja változtatásait.

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

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

A Exec elem az MSBuild Exec tevékenységre hivatkozik. Lásd a Exec-feladat részt, ahol információt talál arról, hogy milyen egyéb paramétereket használhat a végrehajtás testreszabásához. A WorkingDirectory például beállíthatja azt a mappát, amelyről a végrehajtható fájl fut. Az alapértelmezett a projektfájlt tartalmazó könyvtár.

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

Az MSBuild tulajdonságokat (makrókat) használhatja, például a korábbi példában szereplő OutDir, ahogyan arról a jelen cikk későbbi részében, a Makrókszakaszban szó lesz.

Hibák és egyéb kimenetek

A build események kimenete a Build szakaszra íródik a Kimeneti ablak-ban. A megnyitásához válassza a Nézet>Egyéb Windows, Kimeneti ablaklehetőséget, vagy nyomja le Ctrl+Alt+Obillentyűkombinációt. A melletti legördülő listában válassza a Buildlehetőséget akimenetének megjelenítéséhez.

Ha az előre összeállított vagy a buildelés utáni esemény nem fejeződik be sikeresen, a buildet úgy állíthatja le, hogy az eseményművelet nullától (0) eltérő kóddal lép ki. A nulla kilépési kód sikeres műveletet jelez; bármely más kilépési kód hibának minősül.

Ha az előre elkészített esemény meghiúsul, a hibalista ablakban ehhez hasonló hibaüzenet jelenhet meg:

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

Ha nincs elég információ a hibalista ablakban, a Kimeneti Ablak használatával megtekintheti a teljes buildkimenetet, beleértve a kötegelt fájlok kimenetét is.

Borravaló

A hibalista ablak csak egy kimeneti sorra korlátozódik, amely az eseményhez elsőként megadott sor. Ha a hibalista ablak kimenete fontos Önnek, akkor ne helyezzen egynél több sort az eseménybe. Hozzon létre egy kötegfájlt a Windows parancssorából vagy az operációs rendszerből, majd használja a call mybatchfile.bat az eseményhez. Foglalja bele a parancsokat magába a kötegfájlba.

A batch fájlokban használható parancsokkal kapcsolatos információért tekintse meg a Windows parancsokat.

Makrók

Az általánosan elérhető "makrók" (valójában MSBuild tulajdonságok) a MSBuild általános tulajdonságokcímű témakörben találhatók. A .NET SDK-projektek (.NET Core vagy .NET 5 és újabb verziók) további tulajdonságai a Microsoft.NET.Sdk MSBuild tulajdonságok szakaszban vannak felsorolva.

A buildelési események szkriptjeiben érdemes lehet hivatkozni egyes projektszintű változók értékeire, például a projekt nevére vagy a kimeneti mappa helyére. A Visual Studio korábbi verzióiban ezeket makróknaknevezték. A Visual Studio legutóbbi verzióiban a makrókkal egyenértékű az MSBuild tulajdonság. Az MSBuild az a buildmotor, amelyet a Visual Studio a projektfájl feldolgozásához használ a build végrehajtásakor. Az IDE egyik buildeseménye MSBuild célt eredményez a projektfájlban. A projektfájlban a célban elérhető MSBuild tulajdonságot (például $(OutDir) vagy $(Configuration)) használhatja. Az msbuild tulajdonságok, amelyek ezekben az eseményekben elérhetők, a projektfájlban implicit módon vagy explicit módon importált fájloktól függenek, például a .props és .targets fájloktól, valamint a projektfájlban beállított tulajdonságoktól, például PropertyGroup elemekben. Ügyeljen arra, hogy az egyes tulajdonságok pontos helyesírását használja. Nem jelenik meg hiba, ha hibásan írt meg egy tulajdonságot; ehelyett egy definiálatlan tulajdonság üres sztringre értékel.

Tegyük fel például, hogy az alábbiak szerint ad meg egy építés előtti eseményt:

Képernyőkép egy előzetes összeállítási esemény példájáról.

Ez az előre elkészített esemény a következő bejegyzést eredményezi, amelyet egy Target nevezünk el a projektfájlban:

  <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>

A build esemény olyan célként jelenik meg, amely tartalmazza a Exec feladatot, a megadott bemenettel. Az új vonalak az XML-ben vannak kódolva.

Amikor ebben a példában felépíti a projektet, az előre elkészített esemény kinyomtatja bizonyos tulajdonságok értékeit. Ebben a példában $(CscToolPath) nem hoz létre kimenetet, mert nincs definiálva. Ez egy opcionális tulajdonság, amelyet a projektfájlban definiálhat a C#-fordító testreszabott példányának elérési útjának megadásához (például ha a csc.exeegy másik verzióját tesztelte, vagy egy kísérleti fordítót).

A buildesemények kimenete a build kimenetére lesz írva, amely a Kimenet ablakban található. A Kimenet megjelenítése legördülő listában válassza a Buildlehetőséget.

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

Jegyzet

Egyes forgatókönyvek összetettebb buildelési műveleteket igényelnek, mint a buildesemények. Számos gyakori kódgenerálási forgatókönyv esetében például tiszta és újraépítési műveleteket kell kezelnie, és érdemes lehet engedélyezni a növekményes buildelést a kódgenerálási lépésekhez, hogy a lépés csak akkor fusson, ha a kimenet elavult a bemenetek tekintetében. Az MSBuild úgy lett kialakítva, hogy intelligensen kezelje ezeket a forgatókönyveket. Érdemes lehet létrehozni egy egyéni célt, amely meghatározza, hogy AfterTargets vagy BeforeTargets fusson a buildelési folyamat egy adott pontján. Speciális forgatókönyvek esetén, a további szabályozás érdekében érdemes létrehozni egy egyéni feladatot, vagy tekintse át a build testreszabásának különböző módszereit.

1. példa

  1. Adjon meg egy másolási parancsot a buildkimenet másik mappába másolásához.

    xcopy "$(TargetDir)*.*" "C:\Drop\$(Configuration)\" /E /Y
    

    A parancs az MSBuild tulajdonságokra TargetDir és Configurationa . Jegyezze fel az idézőjelek használatát, amelyek a szóközökkel rendelkező útvonalak kezeléséhez szükségesek.

  2. Lépjen ki a Tulajdonságtervezőből, és építsen. A kimeneti fájlokat az almappában C:\Drop lévő célmappába Configurationkell másolni.

  3. A Kimenet ablakban a legördülő menüben válthat a Build kimenetének megtekintéséhez, és megtekintheti a parancs meghívásának xcopy helyét. Ha hibaüzenet jelenik meg, győződjön meg arról, hogy a felhasználói fiókja írási hozzáféréssel rendelkezik a helyhez.

2. példa

  1. Hozzon létre egy postbuild.bat nevű kötegfájlt a projektmappában a következő tartalommal:

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

    Ne feledje, hogy egy kötegfájlban %1 az első átadott argumentumra hivatkozik.

  2. Hívja meg a kötegfájlt a Build utáni esemény projekttulajdonságok szakaszában, és adjon át egy argumentumot az MSBuild tulajdonság $(TargetPath)használatával.

    call postbuild.bat $(TargetPath)
    

    Ha egy kötegfájlban egy MSBuild tulajdonság (makró) értékét kell használnia, az itt bemutatott argumentumként továbbíthatja.

  3. Hozza létre a projektet, és ellenőrizze a kimeneti mappát. A másolt fájlnak az összeállított egység mellett kell megjelennie. A Kimeneti ablakBuild szakaszában a kötegelt fájl kimenetének kell megjelennie:

    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 ==========