ProjectStartedEventArgs Classe

Definizione

Fornisce dati per l'evento ProjectStarted.Provides data for the ProjectStarted event.

public ref class ProjectStartedEventArgs : Microsoft::Build::Framework::BuildStatusEventArgs
[System.Serializable]
public class ProjectStartedEventArgs : Microsoft.Build.Framework.BuildStatusEventArgs
type ProjectStartedEventArgs = class
    inherit BuildStatusEventArgs
Public Class ProjectStartedEventArgs
Inherits BuildStatusEventArgs
Ereditarietà
Attributi

Esempi

Nell'esempio seguente viene illustrato come scrivere un logger di base che risponde agli eventi di compilazione.The following example shows how to write a basic logger that responds to build events.

using System;
using System.IO;
using System.Security;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace MyLoggers
{
    // This logger will derive from the Microsoft.Build.Utilities.Logger class,
    // which provides it with getters and setters for Verbosity and Parameters,
    // and a default empty Shutdown() implementation.
    public class BasicFileLogger : Logger
    {
        /// <summary>
        /// Initialize is guaranteed to be called by MSBuild at the start of the build
        /// before any events are raised.
        /// </summary>
        public override void Initialize(IEventSource eventSource)
        {
            // The name of the log file should be passed as the first item in the
            // "parameters" specification in the /logger switch.  It is required
            // to pass a log file to this logger. Other loggers may have zero or more than 
            // one parameters.
            if (null == Parameters)
            {
                throw new LoggerException("Log file was not set.");
            }
            string[] parameters = Parameters.Split(';');
            
            string logFile = parameters[0];
            if (String.IsNullOrEmpty(logFile))
            {
                throw new LoggerException("Log file was not set.");
            }
            
            if (parameters.Length > 1)
            {
                throw new LoggerException("Too many parameters passed.");
            }
            
            try
            {
                // Open the file
                this.streamWriter = new StreamWriter(logFile);
            }
            catch (Exception ex)
            {
                if
                (
                    ex is UnauthorizedAccessException
                    || ex is ArgumentNullException
                    || ex is PathTooLongException
                    || ex is DirectoryNotFoundException
                    || ex is NotSupportedException
                    || ex is ArgumentException
                    || ex is SecurityException
                    || ex is IOException
                )
                {
                    throw new LoggerException("Failed to create log file: " + ex.Message);
                }
                else
                {
                    // Unexpected failure
                    throw;
                }
            }

            // For brevity, we'll only register for certain event types. Loggers can also
            // register to handle TargetStarted/Finished and other events.
            eventSource.ProjectStarted += new ProjectStartedEventHandler(eventSource_ProjectStarted);
            eventSource.TaskStarted += new TaskStartedEventHandler(eventSource_TaskStarted);
            eventSource.MessageRaised += new BuildMessageEventHandler(eventSource_MessageRaised);
            eventSource.WarningRaised += new BuildWarningEventHandler(eventSource_WarningRaised);
            eventSource.ErrorRaised += new BuildErrorEventHandler(eventSource_ErrorRaised);
            eventSource.ProjectFinished += new ProjectFinishedEventHandler(eventSource_ProjectFinished);
        }

        void eventSource_ErrorRaised(object sender, BuildErrorEventArgs e)
        {
            // BuildErrorEventArgs adds LineNumber, ColumnNumber, File, amongst other parameters
            string line = String.Format(": ERROR {0}({1},{2}): ", e.File, e.LineNumber, e.ColumnNumber);
            WriteLineWithSenderAndMessage(line, e);
        }
        
        void eventSource_WarningRaised(object sender, BuildWarningEventArgs e)
        {
            // BuildWarningEventArgs adds LineNumber, ColumnNumber, File, amongst other parameters
            string line = String.Format(": Warning {0}({1},{2}): ", e.File, e.LineNumber, e.ColumnNumber);
            WriteLineWithSenderAndMessage(line, e);
        }

        void eventSource_MessageRaised(object sender, BuildMessageEventArgs e)
        {
            // BuildMessageEventArgs adds Importance to BuildEventArgs
            // Let's take account of the verbosity setting we've been passed in deciding whether to log the message
            if ((e.Importance == MessageImportance.High && IsVerbosityAtLeast(LoggerVerbosity.Minimal))
                || (e.Importance == MessageImportance.Normal && IsVerbosityAtLeast(LoggerVerbosity.Normal))
                || (e.Importance == MessageImportance.Low && IsVerbosityAtLeast(LoggerVerbosity.Detailed))				
                )
            {
                WriteLineWithSenderAndMessage(String.Empty, e);
            }
        }

        void eventSource_TaskStarted(object sender, TaskStartedEventArgs e)
        {
            // TaskStartedEventArgs adds ProjectFile, TaskFile, TaskName
            // To keep this log clean, this logger will ignore these events.
        }
        
        void eventSource_ProjectStarted(object sender, ProjectStartedEventArgs e)
        {
            // ProjectStartedEventArgs adds ProjectFile, TargetNames
            // Just the regular message string is good enough here, so just display that.
            WriteLine(String.Empty, e);
            indent++;
        }

        void eventSource_ProjectFinished(object sender, ProjectFinishedEventArgs e)
        {
            // The regular message string is good enough here too.
            indent--;
            WriteLine(String.Empty, e);
        }
        
        /// <summary>
        /// Write a line to the log, adding the SenderName and Message
        /// (these parameters are on all MSBuild event argument objects)
        /// </summary>
        private void WriteLineWithSenderAndMessage(string line, BuildEventArgs e)
        {
            if (0 == String.Compare(e.SenderName, "MSBuild", true /*ignore case*/))
            {
                // Well, if the sender name is MSBuild, let's leave it out for prettiness
                WriteLine(line, e);
            }
            else
            {
                WriteLine(e.SenderName + ": " + line, e);
            }
        }
        
        /// <summary>
        /// Just write a line to the log
        /// </summary>
        private void WriteLine(string line, BuildEventArgs e)
        {
            for (int i = indent; i > 0; i--)
            {
                streamWriter.Write("\t");
            }
            streamWriter.WriteLine(line + e.Message);
        }
        
        /// <summary>
        /// Shutdown() is guaranteed to be called by MSBuild at the end of the build, after all 
        /// events have been raised.
        /// </summary>
        public override void Shutdown()
        {
            // Done logging, let go of the file
            streamWriter.Close();
        }

        private StreamWriter streamWriter;
        private int indent;
    }
}

Commenti

AVVISO: se si contrassegna un tipo [Serializable] senza implementare ISerializable, viene imposto un contratto di serializzazione. si tratta di una promessa di non modificare mai i campi del tipo, ad esempio se il tipo non è modificabile. l'aggiunta di nuovi campi nella versione successiva del tipo senza seguire alcune speciali linee guida FX può interrompere la compatibilità con le versioni precedenti e precedentiWARNING: marking a type [Serializable] without implementing ISerializable imposes a serialization contract -- it is a promise to never change the type's fields i.e. the type is immutable; adding new fields in the next version of the type without following certain special FX guidelines, can break both forward and backward compatibility

Costruttori

ProjectStartedEventArgs()

Inizializza una nuova istanza della classe ProjectStartedEventArgs.Initializes a new instance of the ProjectStartedEventArgs class.

ProjectStartedEventArgs(Int32, String, String, String, String, IEnumerable, IEnumerable, BuildEventContext)

Inizializza una nuova istanza della classe ProjectStartedEventArgs con i valori specificati.Initializes a new instance of the ProjectStartedEventArgs class with the specified values.

ProjectStartedEventArgs(Int32, String, String, String, String, IEnumerable, IEnumerable, BuildEventContext, DateTime)

Questo costruttore consente l'inizializzazione dei dati degli eventi.This constructor allows event data to be initialized. Si presuppone che il mittente sia "MSBuild".Sender is assumed to be "MSBuild".

ProjectStartedEventArgs(Int32, String, String, String, String, IEnumerable, IEnumerable, BuildEventContext, IDictionary<String,String>, String)

Questo costruttore consente l'inizializzazione dei dati degli eventi.This constructor allows event data to be initialized.

Si presuppone che il mittente sia "MSBuild".Sender is assumed to be "MSBuild".

ProjectStartedEventArgs(String, String, String, String, IEnumerable, IEnumerable)

Inizializza una nuova istanza della classe ProjectStartedEventArgs con i valori specificati.Initializes a new instance of the ProjectStartedEventArgs class with the specified values.

ProjectStartedEventArgs(String, String, String, String, IEnumerable, IEnumerable, DateTime)

Questo costruttore consente l'inizializzazione dei dati degli eventi.This constructor allows event data to be initialized. È possibile impostare anche il timestamp. Si presuppone che il mittente sia "MSBuild".Also the timestamp can be set Sender is assumed to be "MSBuild".

Campi

InvalidProjectId

Valore che rappresenta un ID di progetto non valido.A value representing an invalid project ID.

Proprietà

BuildEventContext

Ottiene o imposta informazioni contestuali sul percorso.Gets or sets location contextual information. È associato agli eventi di registrazione per stabilire dove si trovano in relazione a processo, motore, progetto, destinazione o attività in esecuzione.This is attached to logging events to define where they are located in relation to the process, engine, project, target, or task that is executing.

(Ereditato da BuildEventArgs)
GlobalProperties

Ottiene il set di proprietà globali utilizzate per valutare il progetto.Gets the set of global properties used to evaluate this project.

HelpKeyword

Ottiene la parola chiave della Guida per l'evento.Gets the Help keyword for the event.

(Ereditato da BuildEventArgs)
Items

Ottiene l'elenco di elementi dell'evento.Gets the list of items for the event.

Message

Ottiene il messaggio per l'evento.Gets the message for the event.

(Ereditato da BuildEventArgs)
ParentProjectBuildEventContext

Fornisce informazioni sul percorso contestuali, includendo il progetto, se presente, che ha richiamato la compilazione di questo progetto.Provides contextual location information, including the project if any that invoked the build of this project.

ProjectFile

Ottiene il file di progetto associato all'evento.Gets the project file associated with the event.

ProjectId

Ottiene il file di progetto associato all'evento.Gets the project file associated with the event.

Properties

Ottiene l'elenco di proprietà dell'evento.Gets the list of properties for the event.

SenderName

Ottiene il nome della classe Object che genera l'evento.Gets the name of the Object raising the event.

(Ereditato da BuildEventArgs)
TargetNames

Ottiene l'elenco delle destinazioni da compilare nel progetto.Gets the list of targets to be built in the project.

ThreadId

Ottiene un identificatore integer per il thread che ha generato l'evento.Gets an integer identifier for the thread that raised the event.

(Ereditato da BuildEventArgs)
Timestamp

Ottiene l'ora in cui è stato generato l'evento nel formato DateTime.Gets the time the event was raised as a DateTime.

(Ereditato da BuildEventArgs)
ToolsVersion

Ottiene la versione degli strumenti utilizzata per valutare questo progetto.Gets the tools version used to evaluate this project.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Si applica a