ProjectStartedEventArgs 类

定义

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
继承
属性

示例

下面的示例演示如何编写响应生成事件的基本记录器。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;
    }
}

注解

警告: 标记类型 [Serializable] 而不实现 ISerializable 会产生序列化协定--它是一项承诺永远不要更改类型的字段, 即, 类型是不可变的;在类型的下一个版本中添加新字段时, 如果不遵循某些特殊的 FX 准则, 则会中断向前和向后兼容性WARNING: 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

构造函数

ProjectStartedEventArgs()

初始化 ProjectStartedEventArgs 类的新实例。Initializes a new instance of the ProjectStartedEventArgs class.

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

用指定的值初始化 ProjectStartedEventArgs 类的新实例。Initializes a new instance of the ProjectStartedEventArgs class with the specified values.

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

此构造函数允许初始化事件数据。This constructor allows event data to be initialized. 发送方将假定为“MSBuild”。Sender is assumed to be "MSBuild".

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

此构造函数允许初始化事件数据。This constructor allows event data to be initialized.

发送方将假定为“MSBuild”。Sender is assumed to be "MSBuild".

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

用指定的值初始化 ProjectStartedEventArgs 类的新实例。Initializes a new instance of the ProjectStartedEventArgs class with the specified values.

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

此构造函数允许初始化事件数据。This constructor allows event data to be initialized. 此外,可以设置时间戳,并将发送方假定为“MSBuild”。Also the timestamp can be set Sender is assumed to be "MSBuild".

字段

InvalidProjectId

一个值,表示无效项目 ID。A value representing an invalid project ID.

属性

BuildEventContext

获取或设置位置上下文信息。Gets or sets location contextual information. 这连接到记录事件以定义其相对于正在执行的进程、引擎、项目、目标或任务的位置。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.

(继承自 BuildEventArgs)
GlobalProperties

获取用于计算项目的全局属性集。Gets the set of global properties used to evaluate this project.

HelpKeyword

获取事件的“帮助”关键字。Gets the Help keyword for the event.

(继承自 BuildEventArgs)
Items

获取事件的项的列表。Gets the list of items for the event.

Message

获取事件的消息。Gets the message for the event.

(继承自 BuildEventArgs)
ParentProjectBuildEventContext

提供上下文位置信息,包括任何调用了此项目的生成的项目。Provides contextual location information, including the project if any that invoked the build of this project.

ProjectFile

获取与事件关联的项目文件。Gets the project file associated with the event.

ProjectId

获取与事件关联的项目文件。Gets the project file associated with the event.

Properties

获取事件的属性列表。Gets the list of properties for the event.

SenderName

获取引发事件的 Object 的名称。Gets the name of the Object raising the event.

(继承自 BuildEventArgs)
TargetNames

获取要在项目中生成的目标的列表。Gets the list of targets to be built in the project.

ThreadId

获取引发事件的线程的整数标识符。Gets an integer identifier for the thread that raised the event.

(继承自 BuildEventArgs)
Timestamp

获取 DateTime 形式的事件引发时间。Gets the time the event was raised as a DateTime.

(继承自 BuildEventArgs)
ToolsVersion

获取用于计算项目的工具版本。Gets the tools version used to evaluate this project.

方法

Equals(Object)

确定指定的对象是否等于当前对象。Determines whether the specified object is equal to the current object.

(继承自 Object)
GetHashCode()

用作默认哈希函数。Serves as the default hash function.

(继承自 Object)
GetType()

获取当前实例的 TypeGets the Type of the current instance.

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(继承自 Object)
ToString()

返回一个表示当前对象的 string。Returns a string that represents the current object.

(继承自 Object)

适用于