Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd bygghändelser för att ange kommandon som körs innan bygget startar eller när bygget har slutförts.
Ange en bygghändelse
- I Solution Explorerväljer du det projekt som du vill ange bygghändelsen för. 
- På menyn Project klickar du på Egenskaper. 
- Välj fliken Skapa händelser. 
- På kommandoraden Förskapa händelse anger du syntaxen för bygghändelsen. - Not - Förbyggnadshändelser körs inte om projektet är uppdaterat och ingen kompilering startas. 
- Ange syntaxen för bygghändelsen på kommandoraden efter kompileringshändelsen. - Not - Lägg till en - call-instruktion före alla kommandon efter bygget som kör .bat filer. Till exempel- call MyFile.bateller- call MyFile.bat call MyFile2.bat. Sökvägar kan vara absoluta eller relativa till utdatafoldern.
- I rutan Kör händelsen efter bygget anger du under vilka villkor som händelsen efter bygget ska köras. - Not - För att lägga till en mer omfattande syntax eller för att välja några byggmakron från dialogrutan för kommandoraden Förskapa händelse/efter bygghändelse, klickar du på ellipsknappen (...) för att visa en redigeringsruta. 
- I Solution Explorerväljer du det projekt som du vill ange bygghändelsen för. 
- I menyn Project klicka på Egenskaper för {ProjectName} (eller, från Solution Explorer, tryck på Alt+Retur). 
- Välj Skapa >-händelser.   
- I avsnittet Pre-build event anger du syntaxen för bygghändelsen. - Not - Förbyggnadshändelser körs inte om projektet är uppdaterat och ingen kompilering startas. 
- I avsnittet Efterkompilering anger du syntaxen för händelsen. - Not - Lägg till en - call-instruktion före alla kommandon efter bygget som kör .bat filer. Till exempel- call MyFile.bateller- call MyFile.bat call MyFile2.bat. Sökvägar kan vara absoluta eller relativa till utdatafoldern.
- I avsnittet När efterbyggnadshändelsen ska köras, specificerar du under vilka förhållanden efterbyggnadshändelsen ska köras. 
Skapa händelsekommandona för build
Kommandona för bygghändelsen kan innehålla alla kommandon som är giltiga i en kommandoprompt eller i en .bat-fil. I Windows-kommandoreferensendokumenteras tillgängliga kommandon. Namnet på en batchfil bör föregås av call för att säkerställa att alla efterföljande kommandon körs. Batchfilen körs från utdatamappen, till exempel bin/Debug. Om du behöver samma batchfil för alla konfigurationer kan du placera den i samma mapp som projektfilen och använda en relativ sökväg till den, till exempel call ../../prebuild.bat.
Du kan köra PowerShell- skript genom att ange ett kommando som PowerShell MyPowerShellScript.ps1. Sökvägen till PowerShell-skriptet kan vara absolut eller vara relativ till projektkatalogen. Du måste se till att körningsprincipen för PowerShell-skript i operativsystemet är korrekt inställd för att kunna köra skriptet. Se Om körningsprinciper.
Om du vill använda ett annat gränssnitt, till exempel bash, använder du vanligtvis samma kommandosyntax som du skulle använda för att starta ett gränssnittsskript från Windows-kommandotolken. Användning av gränssnitt från tredje part ligger utanför omfånget för den här dokumentationen, men webbplatser som Stack Overflow kan vara till hjälp.
I projektfilen
När du utför föregående steg ändrar Visual Studio projektfilen genom att lägga till PreBuild eller PostBuild mål och nödvändig MSBuild-kod för att köra de steg du angav.  Du kan öppna projektfilen och se stegen. Det går bra att ändra stegen i projektfilen. Ändringarna visas i avsnittet Build > Events i projektegenskaperna när du har sparat ändringarna.
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="call prebuild.bat" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="call postbuild.bat" />
</Target>
Elementet Exec refererar till UPPGIFTEN MSBuild Exec. Se Exec-task för information om vilka andra parametrar du kan använda för att anpassa körningen av uppgiften. Du kan till exempel använda WorkingDirectory för att ange mappen som den körbara filen ska köras från. Standardvärdet är den katalog som innehåller projektfilen.
<Exec Command="call prebuild.bat" WorkingDirectory="$(OutDir)">
Du kan använda MSBuild-egenskaper (makron), till exempel OutDir i föregående exempel, enligt beskrivningen senare i den här artikeln Makron.
Fel och andra utdata
Utdata från bygghändelserna skrivs till avsnittet Build i -utdatafönstret. Öppna den genom att välja View>Other Windows, Output Windoweller tryck på Ctrl+Alt+O. I listrutan bredvid Visa utdata frånväljer du Skapa.
Om din för- eller efterversionshändelse inte slutförs framgångsrikt kan du avsluta kompileringen genom att låta händelseåtgärden avslutas med en annan kod än noll (0). En nollavslutskod anger en lyckad åtgärd. någon annan slutkod anses vara ett fel.
Om din förekompileringsevent misslyckas kan du se ett fel som det här i fönstret Fellista:
MSB3073    The command "call c:\source\repos\prebuild.bat" exited with code 1.
Om det inte finns tillräckligt med information i fönstret fellista kan du prova att använda utdatafönster för att visa fullständiga byggutdata, inklusive utdata från batchfiler.
Tips
Fönstret fellista är begränsat till bara en rad med utdata, den första raden som du angav för händelsen. Om utdata i Fellista fönstret är viktigt för dig, bör du undvika att placera fler än en rad i händelsen. Skapa en batchfil från Windows-kommandotolken eller i operativsystemet och använd sedan bara call mybatchfile.bat för händelsen. Inkludera kommandona i själva batchfilen.
Mer information om vilka kommandon du kan använda i batchfiler finns i Windows-kommandon.
Makron
Vanliga "makron" (i själva verket MSBuild-egenskaper) listas under vanliga egenskaper för MSBuild. För .NET SDK-projekt (.NET Core eller .NET 5 och senare) visas ytterligare egenskaper i MSBuild-egenskaper för Microsoft.NET.Sdk.
I skripten för bygghändelser kanske du vill referera till värdena för vissa variabler på projektnivå, till exempel namnet på projektet eller platsen för utdatamappen. I tidigare versioner av Visual Studio kallades dessa makron. Motsvarigheten till makron i de senaste versionerna av Visual Studio är MSBuild-egenskaper. MSBuild är den byggmotor som Visual Studio använder för att bearbeta projektfilen när den utför en version. Ett bygghändelse i IDE resulterar i ett MSBuild-mål  i projektfilen. Du kan använda valfri MSBuild-egenskap som är tillgänglig i målet i projektfilen (till exempel $(OutDir) eller $(Configuration)). De MSBuild-egenskaper som är tillgängliga för dig i dessa händelser beror på de filer som implicit eller explicit importeras i en projektfil, till exempel .props och .targets filer och egenskaper som anges i projektfilen, till exempel i PropertyGroup element. Var noga med att använda den exakta stavningen för varje egenskap. Inget fel rapporteras om du felstavar en egenskap. I stället utvärderas en odefinierad egenskap till en tom sträng.
Anta till exempel att du anger en förberedelseträff enligt följande:
               
              
            
Händelsen före bygget resulterar i följande post, som kallas för en Target i projektfilen:
  <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>
Bygghändelsen visas som ett byggmål som inkluderar Exec-funktionen med de indata du angav som Command. Newlines kodas i XML-koden.
När du skapar projektet i det här exemplet skriver händelsen pre-build ut värdena för vissa egenskaper. I det här exemplet skapar $(CscToolPath) inga utdata eftersom det inte har definierats. Det är en valfri egenskap som du kan definiera i projektfilen för att ge sökvägen till en anpassad instans av C#-kompilatorn (till exempel om du testade en annan version av csc.exeeller en experimentell kompilator).
Utdata från bygghändelser skrivs till byggutdata, som finns i fönstret Utdata. I listrutan Visa utdata från väljer du Skapa.
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
Not
Vissa scenarier kräver mer komplexa byggåtgärder än vad bygghändelserna kan göra. För många vanliga scenarier för kodgenerering behöver du till exempel hantera operationer för att rensa och bygga om, och du kanske vill aktivera inkrementell byggprocess för kodgenereringsstegen, så att steget bara körs om utdata är inaktuella i förhållande till indata. MSBuild är utformat för att hantera alla dessa scenarier på ett intelligent sätt. Överväg att skapa ett anpassat mål som anger AfterTargets eller BeforeTargets att köras vid en specifik tidpunkt i byggprocessen, och för ytterligare kontroll i avancerade scenarier kan du överväga att skapa en anpassad uppgift, eller granska de olika sätt du kan anpassa din build.
Exempel 1
- Ange ett kopieringskommando för att kopiera byggutdata till en annan mapp. - xcopy "$(TargetDir)*.*" "C:\Drop\$(Configuration)\" /E /Y- Kommandot refererar till MSBuild-egenskaperna - TargetDiroch- Configuration. Observera användningen av citattecken, som krävs för att hantera sökvägar med blanksteg.
- Avsluta egenskapsdesignern och bygget. Utdatafilerna ska kopieras till målmappen - C:\Dropunder undermappen- Configuration.
- I fönstret Utdata använder du listrutan för att växla för att visa Build-utdata och se var - xcopykommandot anropades. Om du ser ett fel kontrollerar du att ditt användarkonto har skrivåtkomst till platsen.
Exempel 2
- Skapa en batchfil med namnet - postbuild.bati projektmappen med följande innehåll:- echo Copying output file %1 to %1.copy copy %1 %1.copy- Kom ihåg att i en batchfil refererar - %1till det första argumentet som skickades in.
- Anropa batchfilen i avsnittet Efterbyggnadshändelse i projektegenskaperna och passera ett argument med egenskapen MSBuild - $(TargetPath).- call postbuild.bat $(TargetPath)- Om du behöver använda värdet för en MSBuild-egenskap (makro) i en batchfil kan du skicka den som ett argument som visas här. 
- Skapa projektet och kontrollera utdatamappen. Du bör se den kopierade filen bredvid den byggda sammansättningen. I utdatafönstreti avsnittet Build bör du se batchfilens utdata: - 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 ==========