Skip to content

Commit 310d7b4

Browse files
author
William Li
committed
Add telemetry data points for .NET Core 2.0
1 parent 48a3c4b commit 310d7b4

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.TargetFrameworkInference.targets

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ Copyright (c) .NET Foundation. All rights reserved.
102102
FormatArguments="$([MSBuild]::Escape('$(TargetFramework)'))" />
103103
</Target>
104104

105+
<Target Name="_CollectTargetFrameworkForTelemetry" AfterTargets="_CheckForUnsupportedTargetFramework">
106+
<Telemetry EventName="TargetFramework" EventData="version=$([MSBuild]::Escape('$(TargetFrameworkMoniker)'))" />
107+
</Target>
108+
105109
<!--
106110
Don't leave TargetFrameworkVersion empty if it still hasn't been determined. We will trigger the error above,
107111
but we need this to be a valid version so that our error message does not get pre-empted by failure to interpret
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using FluentAssertions;
2+
using Microsoft.NET.TestFramework;
3+
using Microsoft.NET.TestFramework.Assertions;
4+
using Microsoft.NET.TestFramework.Commands;
5+
using Microsoft.NET.TestFramework.ProjectConstruction;
6+
using System;
7+
using System.IO;
8+
using Xunit;
9+
using Xunit.Abstractions;
10+
using System.Reflection;
11+
12+
namespace Microsoft.NET.Build.Tests
13+
{
14+
public class GivenThatWeWantToBuildANetCoreAppAndPassingALogger : SdkTest
15+
{
16+
public GivenThatWeWantToBuildANetCoreAppAndPassingALogger(ITestOutputHelper log) : base(log)
17+
{
18+
}
19+
20+
[Fact]
21+
public void It_collects_TargetFramework_version()
22+
{
23+
string targetFramework = "netcoreapp1.0";
24+
var testProject = new TestProject()
25+
{
26+
Name = "FrameworkTargetTelemetryTest",
27+
TargetFrameworks = targetFramework,
28+
IsSdkProject = true,
29+
};
30+
Type loggerType = typeof(LogTelemetryToStdOutForTest);
31+
var TelemetryTestLogger = new[]
32+
{
33+
$"/Logger:{loggerType.FullName},{loggerType.GetTypeInfo().Assembly.Location}"
34+
};
35+
var testAsset = _testAssetsManager.CreateTestProject(testProject)
36+
.Restore(Log, testProject.Name, TelemetryTestLogger);
37+
38+
var buildCommand = new BuildCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name));
39+
40+
buildCommand
41+
.Execute(TelemetryTestLogger)
42+
.StdOut.Should()
43+
.Contain("{\"EventName\":\"TargetFramework\",\"Properties\":{\"version\":\".NETCoreApp,Version=v1.0\"}");
44+
}
45+
46+
[Fact]
47+
public void It_collects_multi_TargetFramework_version()
48+
{
49+
string targetFramework = "net46;netcoreapp1.1";
50+
51+
var testProject = new TestProject()
52+
{
53+
Name = "MultitargetTelemetry",
54+
TargetFrameworks = targetFramework,
55+
IsSdkProject = true,
56+
};
57+
Type loggerType = typeof(LogTelemetryToStdOutForTest);
58+
var TelemetryTestLogger = new[]
59+
{
60+
$"/Logger:{loggerType.FullName},{loggerType.GetTypeInfo().Assembly.Location}"
61+
};
62+
var testAsset = _testAssetsManager.CreateTestProject(testProject)
63+
.Restore(Log, testProject.Name, TelemetryTestLogger);
64+
65+
var buildCommand = new BuildCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name));
66+
67+
buildCommand
68+
.Execute(TelemetryTestLogger)
69+
.StdOut.Should()
70+
.Contain("{\"EventName\":\"TargetFramework\",\"Properties\":{\"version\":\".NETFramework,Version=v4.6\"}")
71+
.And
72+
.Contain("{\"EventName\":\"TargetFramework\",\"Properties\":{\"version\":\".NETCoreApp,Version=v1.1\"}");
73+
}
74+
}
75+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) .NET Foundation and contributors. All rights reserved.
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
using System;
5+
using Microsoft.Build.Framework;
6+
using Microsoft.Build.Utilities;
7+
using NuGet.Protocol;
8+
9+
namespace Microsoft.NET.Build.Tests
10+
{
11+
public sealed class LogTelemetryToStdOutForTest : Logger
12+
{
13+
14+
public LogTelemetryToStdOutForTest()
15+
{
16+
}
17+
18+
public override void Initialize(IEventSource eventSource)
19+
{
20+
if (eventSource is IEventSource2 eventSource2)
21+
{
22+
eventSource2.TelemetryLogged += OnTelemetryLogged;
23+
}
24+
}
25+
26+
private void OnTelemetryLogged(object sender, TelemetryEventArgs args)
27+
{
28+
Console.WriteLine(args.ToJson());
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)