-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
TargetFinishedEventArgs.cs
189 lines (169 loc) · 7.02 KB
/
TargetFinishedEventArgs.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Collections;
using System.IO;
using Microsoft.Build.Shared;
#nullable disable
namespace Microsoft.Build.Framework
{
/// <summary>
/// Arguments for target finished events
/// </summary>
// 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
[Serializable]
public class TargetFinishedEventArgs : BuildStatusEventArgs
{
/// <summary>
/// Default constructor
/// </summary>
protected TargetFinishedEventArgs()
: base()
{
// do nothing
}
/// <summary>
/// This constructor allows event data to be initialized.
/// Sender is assumed to be "MSBuild".
/// </summary>
/// <param name="message">text message</param>
/// <param name="helpKeyword">help keyword </param>
/// <param name="targetName">target name</param>
/// <param name="projectFile">project file</param>
/// <param name="targetFile">file in which the target is defined</param>
/// <param name="succeeded">true if target built successfully</param>
public TargetFinishedEventArgs(
string message,
string helpKeyword,
string targetName,
string projectFile,
string targetFile,
bool succeeded)
: this(message, helpKeyword, targetName, projectFile, targetFile, succeeded, DateTime.UtcNow, null)
{
}
/// <summary>
/// This constructor allows event data to be initialized.
/// Sender is assumed to be "MSBuild".
/// </summary>
/// <param name="message">text message</param>
/// <param name="helpKeyword">help keyword </param>
/// <param name="targetName">target name</param>
/// <param name="projectFile">project file</param>
/// <param name="targetFile">file in which the target is defined</param>
/// <param name="succeeded">true if target built successfully</param>
/// <param name="targetOutputs">Target output items for the target. If batching will be null for everything except for the last target in the batch</param>
public TargetFinishedEventArgs(
string message,
string helpKeyword,
string targetName,
string projectFile,
string targetFile,
bool succeeded,
IEnumerable targetOutputs)
: this(message, helpKeyword, targetName, projectFile, targetFile, succeeded, DateTime.UtcNow, targetOutputs)
{
}
/// <summary>
/// This constructor allows event data to be initialized including the timestamp when the event was created.
/// Sender is assumed to be "MSBuild".
/// </summary>
/// <param name="message">text message</param>
/// <param name="helpKeyword">help keyword </param>
/// <param name="targetName">target name</param>
/// <param name="projectFile">project file</param>
/// <param name="targetFile">file in which the target is defined</param>
/// <param name="succeeded">true if target built successfully</param>
/// <param name="eventTimestamp">Timestamp when the event was created</param>
/// <param name="targetOutputs">An <see cref="IEnumerable"/> containing the outputs of the target.</param>
public TargetFinishedEventArgs(
string message,
string helpKeyword,
string targetName,
string projectFile,
string targetFile,
bool succeeded,
DateTime eventTimestamp,
IEnumerable targetOutputs)
: base(message, helpKeyword, "MSBuild", eventTimestamp)
{
this.targetName = targetName;
this.succeeded = succeeded;
this.projectFile = projectFile;
this.targetFile = targetFile;
this.targetOutputs = targetOutputs;
}
private string projectFile;
private string targetFile;
private string targetName;
private bool succeeded;
private IEnumerable targetOutputs;
#region CustomSerializationToStream
/// <summary>
/// Serializes to a stream through a binary writer
/// </summary>
/// <param name="writer">Binary writer which is attached to the stream the event will be serialized into</param>
internal override void WriteToStream(BinaryWriter writer)
{
base.WriteToStream(writer);
writer.WriteOptionalString(projectFile);
writer.WriteOptionalString(targetFile);
writer.WriteOptionalString(targetName);
writer.Write(succeeded);
}
/// <summary>
/// Deserializes from a stream through a binary reader
/// </summary>
/// <param name="reader">Binary reader which is attached to the stream the event will be deserialized from</param>
/// <param name="version">The version of the runtime the message packet was created from</param>
internal override void CreateFromStream(BinaryReader reader, int version)
{
base.CreateFromStream(reader, version);
projectFile = reader.ReadByte() == 0 ? null : reader.ReadString();
targetFile = reader.ReadByte() == 0 ? null : reader.ReadString();
targetName = reader.ReadByte() == 0 ? null : reader.ReadString();
succeeded = reader.ReadBoolean();
}
#endregion
/// <summary>
/// Target name
/// </summary>
public string TargetName => targetName;
/// <summary>
/// True if target built successfully, false otherwise
/// </summary>
public bool Succeeded => succeeded;
/// <summary>
/// Project file associated with event.
/// </summary>
public string ProjectFile => projectFile;
/// <summary>
/// File where this target was declared.
/// </summary>
public string TargetFile => targetFile;
/// <summary>
/// Target outputs
/// </summary>
public IEnumerable TargetOutputs
{
get => targetOutputs;
set => targetOutputs = value;
}
public override string Message
{
get
{
if (RawMessage == null)
{
RawMessage = FormatResourceStringIgnoreCodeAndKeyword(Succeeded ? "TargetFinishedSuccess" : "TargetFinishedFailure", targetName, Path.GetFileName(projectFile));
}
return RawMessage;
}
}
}
}