Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De mogelijkheid van MSBuild om te profiteren van meerdere processors kan de bouwtijd van het project verminderen, maar het voegt ook complexiteit toe aan het bouwen van gebeurtenislogboeken. In een omgeving met één processor komen gebeurtenissen, berichten, waarschuwingen en fouten op een voorspelbare, sequentiële manier bij de logger aan. In een omgeving met meerdere processoren kunnen gebeurtenissen uit verschillende bronnen echter op hetzelfde moment of buiten de reeks aankomen.
Het genereren van een binair logboek (-binlog of -bl switch) en het weergeven met de gestructureerde logboekviewer lost dit probleem grotendeels op. Met MSBuild versie 17.8 of hoger kunt u ook de terminallogger (-tl switch) proberen voor meer gebruiksvriendelijke logboekregistratie-uitvoer in realtime in de console.
Voor een meer algemene oplossing biedt MSBuild een multiprocessorbewuste logger en een logboekregistratiemodel dat u kunt gebruiken om aangepaste 'doorstuurlogboeken' te maken.
Problemen met logboekregistratie voor meerdere processors
Wanneer u een of meer projecten bouwt op een systeem met meerdere processoren of meerdere kernen, worden MSBuild-buildgebeurtenissen voor alle projecten tegelijkertijd gegenereerd. Een lawine van gebeurtenisberichten kan op hetzelfde moment of in de verkeerde volgorde aankomen bij de logger. Omdat een MSBuild 2.0-logger niet is ontworpen om deze situatie te verwerken, kan het de logger overbelasten en leiden tot verhoogde buildtijden, onjuiste logboekuitvoer of zelfs een verbroken build. Om deze problemen op te lossen, kan de logger niet-volgordelijke gebeurtenissen verwerken en gebeurtenissen met hun bronnen correleren.
U kunt de efficiëntie van logboekregistratie nog beter verbeteren door een aangepaste doorstuurlogboekregistratie te maken. Een aangepaste doorstuurlogboekregistratie fungeert als filter door u te laten kiezen, voordat u bouwt, alleen de gebeurtenissen die u wilt bewaken. Wanneer u een aangepaste doorstuurlogger gebruikt, kunnen ongewenste gebeurtenissen de logboekregistratie niet overbelasten, uw logboeken niet rommelig maken of de bouwtijden vertragen.
Modellen voor logboekregistratie met meerdere processors
Om problemen met multi-processor-gerelateerde builds aan te pakken, ondersteunt MSBuild twee logboekregistratiemodellen: centraal en gedistribueerd.
Centraal logboekregistratiemodel
In het centrale logboekregistratiemodel fungeert één exemplaar van MSBuild.exe als het 'centrale knooppunt', en secundaire exemplaren van het centrale knooppunt ('secundaire knooppunten') koppelen zich aan het centrale knooppunt om het te helpen bij het uitvoeren van buildtaken.
Loggers van verschillende typen die aan het centrale knooppunt worden gekoppeld, worden "centrale loggers" genoemd. Er kan slechts één instantie van elk type logger tegelijkertijd aan het centrale knooppunt worden gekoppeld.
Wanneer een build plaatsvindt, routeren de secundaire knooppunten hun build-gebeurtenissen naar het centrale knooppunt. Het centrale knooppunt stuurt alle gebeurtenissen, en ook die van de secundaire knooppunten, naar een of meer van de gekoppelde centrale loggers. De loggers maken vervolgens logboekbestanden die zijn gebaseerd op de binnenkomende gegevens.
Hoewel alleen ILogger door de centrale logger moet worden geïmplementeerd, raden we aan ook INodeLogger te implementeren, zodat de centrale logger met het aantal knooppunten die aan de build deelnemen wordt geïnitialiseerd. De volgende overbelasting van de Initialize methode wordt aangeroepen wanneer de engine de logger initialiseert.
public interface INodeLogger: ILogger
{
public void Initialize(IEventSource eventSource, int nodeCount);
}
Alle bestaande ILogger-gebaseerde loggers kunnen fungeren als centrale loggers en aan de build worden gekoppeld. Centrale loggers die zijn geschreven zonder expliciete ondersteuning voor scenario's voor logboekregistratie van meerdere processors en out-of-ordergebeurtenissen kunnen echter een build breken of betekenisloze uitvoer produceren.
Gedistribueerd logboekregistratiemodel
In het centrale logboekregistratiemodel kan te veel binnenkomend berichtverkeer het centrale knooppunt overbelasten, bijvoorbeeld wanneer veel projecten tegelijkertijd worden gebouwd. Dit kan systeembronnen belasten en de prestaties van de build verminderen. Om dit probleem te vereenvoudigen, ondersteunt MSBuild een gedistribueerd logboekregistratiemodel.
Het gedistribueerde logboekregistratiemodel breidt het centrale logboekregistratiemodel uit door u een doorstuurlogger te laten maken.
Doorstuurlogboeken
Een forwarding logger is een secundaire, lichtgewicht logger met een gebeurtenisfilter dat is verbonden aan een secundair knooppunt en ontvangt binnenkomende buildgebeurtenissen van dat knooppunt. Hiermee worden de binnenkomende gebeurtenissen gefilterd en worden alleen de gebeurtenissen die u opgeeft doorgestuurd naar het centrale knooppunt. Dit vermindert het berichtverkeer dat naar het centrale knooppunt wordt verzonden en verbetert de algehele buildprestaties.
Er zijn twee manieren om gedistribueerde logboekregistratie te gebruiken:
Pas de prefab-doorstuurlogger aan met de naam ConfigurableForwardingLogger.
Schrijf uw eigen aangepaste doorstuurlogger.
U kunt ConfigurableForwardingLogger aanpassen aan uw vereisten. Hiervoor roept u de logger aan op de opdrachtregel met behulp van MSBuild.exe, en noemt u de build-gebeurtenissen die u naar het centrale knooppunt wilt doorsturen.
Als alternatief kunt u een aangepaste doorstuurlogboekregistratie maken. Door een aangepaste doorstuurlogboekregistratie te maken, kunt u het gedrag van de logger verfijnen. Het maken van een aangepaste doorstuurlogger is echter complexer dan alleen het aanpassen van de ConfigurableForwardingLogger. U kunt een doorstuurlogboekregistratie maken door de IForwardingLogger interface te implementeren die is afgeleid van ILogger. De interface wordt gedefinieerd als:
public interface IForwardingLogger: INodeLogger
{
public IEventRedirector EventRedirector { get; set; }
public int NodeId { get; set; }
}
Als u een gebeurtenis wilt doorsturen waar uw logger om geeft, roept u de ForwardEvent methode van de IEventRedirector interface aan in uw doorstuurlogger. Geef de juiste BuildEventArgs, of een afgeleide, door als de parameter. De gebeurtenissen worden vervolgens doorgestuurd naar de centrale logger en kunnen daar actie worden ondernomen.
Zie Doorstuurlogboeken maken voor meer informatie.
De ConfigurableForwardingLogger gebruiken voor eenvoudige gedistribueerde logboekregistratie
Als u een ConfigurableForwardingLogger of een aangepaste doorstuurlogger wilt koppelen, gebruikt u de -distributedlogger switch (afgekort als -dl) in een MSBuild.exe opdrachtregelbuild. De indeling voor het opgeven van de namen van de logboektypen en klassen is hetzelfde als voor de -logger switch, behalve dat een gedistribueerde logboekregistratie altijd twee logboekregistratieklassen heeft in plaats van één, de doorstuurlogger en de centrale logboekregistratie. Hier volgt een voorbeeld van het koppelen van een aangepaste doorstuurlogger met de naam XMLForwardingLogger.
msbuild.exe myproj.proj -distributedlogger:XMLCentralLogger,MyLogger,Version=1.0.2,Culture=neutral*XMLForwardingLogger,MyLogger,Version=1.0.2,Culture=neutral
Opmerking
Een sterretje (*) moet tussen de twee logboeknamen in de -dl schakelaar staan.
Het gebruik van de ConfigurableForwardingLogger is vergelijkbaar met het gebruik van een andere logger (zoals beschreven in buildlogboeken opvragen), behalve dat u de ConfigurableForwardingLogger logger koppelt in plaats van de typische MSBuild-logger en u als parameters de gebeurtenissen opgeeft die u wilt dat de ConfigurableForwardingLogger naar het centrale knooppunt doorgeeft.
Als u bijvoorbeeld alleen een melding wilt ontvangen wanneer een build begint en eindigt, en wanneer er een fout optreedt, geeft BUILDSTARTEDEVENTu , BUILDFINISHEDEVENTen ERROREVENT als parameters door. Meerdere parameters kunnen worden doorgegeven door ze te scheiden met puntkomma's. Hier volgt een voorbeeld van het gebruik van ConfigurableForwardingLogger om alleen de BUILDSTARTEDEVENT, BUILDFINISHEDEVENTen ERROREVENT gebeurtenissen door te sturen.
msbuild.exe myproj.proj -distributedlogger:XMLCentralLogger,MyLogger,Version=1.0.2,Culture=neutral*ConfigureableForwardingLogger,C:\My.dll;BUILDSTARTEDEVENT; BUILDFINISHEDEVENT;ERROREVENT
Hier volgt een lijst met de beschikbare ConfigurableForwardingLogger-parameters.
| Configureerbare ParametersForwardingLogger |
|---|
| BUILDSTARTEDEVENT |
| BOUWVOLTOOIDGEBEURTENIS |
| PROJECTGESTARTEVENT |
| PROJECTFINISHEDEVENT |
| TARGETSTARTEDEVENT |
| TARGETFINISHEDEVENT |
| TASKSTARTEDEVENT |
| TAKENAFGELOPENGEVEURTENIS |
| ERROREVENT |
| WAARSCHUWINGSGEBEURTENIS |
| HOOGBERICHTEVENEMENT |
| NORMALMESSAGEEVENT |
| LOWMESSAGEEVENT |
| CUSTOMEVENT |
| OPDRACHTREGEL |
| PRESTATIESAMENVATTING |
| NOSUMMARY |
| SHOWCOMMANDLINE |