Skip to content

Instantly share code, notes, and snippets.

@bdukes
Created August 8, 2016 18:50
Show Gist options
  • Save bdukes/62ba7dc8b38f68b7152c653bedab2609 to your computer and use it in GitHub Desktop.
Save bdukes/62ba7dc8b38f68b7152c653bedab2609 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Engage.MsBuild.Logger.Vso
{
using System.Globalization;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class VsoLogger : Logger
{
public override void Initialize(IEventSource eventSource)
{
eventSource.WarningRaised += (sender, e) =>
{
LogIssue(
type: IssueType.Warning,
code: e.Code,
columnNumber: e.ColumnNumber,
lineNumber: e.LineNumber,
message: e.Message,
sourcePath: e.File);
};
eventSource.ErrorRaised += (sender, e) =>
{
LogIssue(
type: IssueType.Error,
code: e.Code,
columnNumber: e.ColumnNumber,
lineNumber: e.LineNumber,
message: e.Message,
sourcePath: e.File);
};
}
private static void LogIssue(
IssueType type,
string message,
string sourcePath = null,
int? lineNumber = null,
int? columnNumber = null,
string code = null)
{
var attributes = new[]
{
new KeyValuePair<string, string>("type", type.ToString().ToLowerInvariant()),
new KeyValuePair<string, string>("sourcePath", sourcePath),
new KeyValuePair<string, string>("lineNumber", lineNumber?.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string, string>("columnNumber", columnNumber?.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string, string>("code", code),
}.Where(kvp => !string.IsNullOrWhiteSpace(kvp.Value))
.Select(kvp => $"{kvp.Key}={kvp.Value};");
Console.WriteLine(
"##vso[task.logissue {0}]{1}",
string.Join(string.Empty, attributes),
message);
}
private enum IssueType
{
Warning = 0,
Error,
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment