Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A buildesemények használatával megadhatja a build indítása vagy befejezése után futó parancsokat.
Build esemény megadása
A(z) Megoldáskezelőbenválassza ki a projektet, amelyhez meg szeretné adni a build eseményt.
A Project menüjében kattintson a {ProjectName} Tulajdonságok (vagy Megoldáskezelő, nyomja le Alt+Enter).
Válassza >-eseményeklétrehozása lehetőséget.
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.
A Build utáni esemény szakaszban adja meg a buildesemény szintaxisát.
Jegyzet
Adjon hozzá egy
callutasítást a .bat fájlokat futtató összes összeállítás utáni parancs elé. Példáulcall MyFile.batvagycall MyFile.bat call MyFile2.bat. Az elérési utak lehetnek abszolútak vagy a kimeneti mappához viszonyítva.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:
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)
echo DevEnvDir: $(DevEnvDir)
echo OutDir: $(OutDir)
echo ProjectDir: $(ProjectDir)
echo VisualStudioVersion: $(VisualStudioVersion)
echo AssemblySearchPaths: $(AssemblySearchPaths)
echo AssemblyName: $(AssemblyName)
echo BaseIntermediateOutputPath: $(BaseIntermediateOutputPath)
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
Adjon meg egy másolási parancsot a buildkimenet másik mappába másolásához.
xcopy "$(TargetDir)*.*" "C:\Drop\$(Configuration)\" /E /YA parancs az MSBuild tulajdonságokra
TargetDirésConfigurationa . Jegyezze fel az idézőjelek használatát, amelyek a szóközökkel rendelkező útvonalak kezeléséhez szükségesek.Lépjen ki a Tulajdonságtervezőből, és építsen. A kimeneti fájlokat az almappában
C:\Droplévő célmappábaConfigurationkell másolni.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
xcopyhelyé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
Hozzon létre egy
postbuild.batnevű kötegfájlt a projektmappában a következő tartalommal:echo Copying output file %1 to %1.copy copy %1 %1.copyNe feledje, hogy egy kötegfájlban
%1az első átadott argumentumra hivatkozik.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.
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 ==========