Skip to content

Commit da30389

Browse files
authored
Metrics APIs Additions (#86567)
1 parent eac41a3 commit da30389

33 files changed

+1759
-44
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System.Collections.Generic;
5+
6+
namespace System.Diagnostics
7+
{
8+
internal static class DiagnosticsHelper
9+
{
10+
internal static bool CompareTags(IEnumerable<KeyValuePair<string, object?>>? tags1, IEnumerable<KeyValuePair<string, object?>>? tags2)
11+
{
12+
if (tags1 == tags2)
13+
{
14+
return true;
15+
}
16+
17+
if (tags1 is null || tags2 is null)
18+
{
19+
return false;
20+
}
21+
22+
if (tags1 is ICollection<KeyValuePair<string, object?>> firstCol && tags2 is ICollection<KeyValuePair<string, object?>> secondCol)
23+
{
24+
int count = firstCol.Count;
25+
if (count != secondCol.Count)
26+
{
27+
return false;
28+
}
29+
30+
if (firstCol is IList<KeyValuePair<string, object?>> firstList && secondCol is IList<KeyValuePair<string, object?>> secondList)
31+
{
32+
for (int i = 0; i < count; i++)
33+
{
34+
KeyValuePair<string, object?> pair1 = firstList[i];
35+
KeyValuePair<string, object?> pair2 = secondList[i];
36+
if (pair1.Key != pair2.Key || !object.Equals(pair1.Value, pair2.Value))
37+
{
38+
return false;
39+
}
40+
}
41+
42+
return true;
43+
}
44+
}
45+
46+
using (IEnumerator<KeyValuePair<string, object?>> e1 = tags1.GetEnumerator())
47+
using (IEnumerator<KeyValuePair<string, object?>> e2 = tags2.GetEnumerator())
48+
{
49+
while (e1.MoveNext())
50+
{
51+
KeyValuePair<string, object?> pair1 = e1.Current;
52+
if (!e2.MoveNext())
53+
{
54+
return false;
55+
}
56+
57+
KeyValuePair<string, object?> pair2 = e2.Current;
58+
if (pair1.Key != pair2.Key || !object.Equals(pair1.Value, pair2.Value))
59+
{
60+
return false;
61+
}
62+
}
63+
64+
return !e2.MoveNext();
65+
}
66+
}
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
Microsoft Visual Studio Solution File, Format Version 12.00
2+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{E5B6A94F-615E-4DAF-8110-E5A776BB8296}"
3+
EndProject
4+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.Abstractions", "ref\Microsoft.Extensions.Diagnostics.Abstractions.csproj", "{696D69C9-C5F6-405E-A8B5-5375D08BBADC}"
5+
EndProject
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.Abstractions", "src\Microsoft.Extensions.Diagnostics.Abstractions.csproj", "{2AED2951-7724-4EFC-8E16-6DF877C6B4A6}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{155C3F40-F63D-49DF-87D3-A3EEA27036E8}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{50BA55F5-BD05-4C05-910F-2BFD20BD3465}"
11+
EndProject
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{5725D7DF-DC33-47D2-90C9-D8736C579E77}"
13+
EndProject
14+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "gen", "{55D04C80-4A8F-40AC-967D-3FA77C814D7B}"
15+
EndProject
16+
Global
17+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
18+
Debug|Any CPU = Debug|Any CPU
19+
Release|Any CPU = Release|Any CPU
20+
EndGlobalSection
21+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
22+
{E5B6A94F-615E-4DAF-8110-E5A776BB8296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{E5B6A94F-615E-4DAF-8110-E5A776BB8296}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{E5B6A94F-615E-4DAF-8110-E5A776BB8296}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{E5B6A94F-615E-4DAF-8110-E5A776BB8296}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{696D69C9-C5F6-405E-A8B5-5375D08BBADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{696D69C9-C5F6-405E-A8B5-5375D08BBADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{696D69C9-C5F6-405E-A8B5-5375D08BBADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{696D69C9-C5F6-405E-A8B5-5375D08BBADC}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{2AED2951-7724-4EFC-8E16-6DF877C6B4A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31+
{2AED2951-7724-4EFC-8E16-6DF877C6B4A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
32+
{2AED2951-7724-4EFC-8E16-6DF877C6B4A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
33+
{2AED2951-7724-4EFC-8E16-6DF877C6B4A6}.Release|Any CPU.Build.0 = Release|Any CPU
34+
EndGlobalSection
35+
GlobalSection(SolutionProperties) = preSolution
36+
HideSolutionNode = FALSE
37+
EndGlobalSection
38+
GlobalSection(NestedProjects) = preSolution
39+
{E5B6A94F-615E-4DAF-8110-E5A776BB8296} = {155C3F40-F63D-49DF-87D3-A3EEA27036E8}
40+
{F5E89C81-2D78-4F86-ABD2-7D983F46EB58} = {155C3F40-F63D-49DF-87D3-A3EEA27036E8}
41+
{5351C410-530D-4724-A8E6-430831E7332B} = {155C3F40-F63D-49DF-87D3-A3EEA27036E8}
42+
{696D69C9-C5F6-405E-A8B5-5375D08BBADC} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
43+
{6D9C22DB-C4E3-483E-AF78-C1DCE6ED8DD6} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
44+
{C8C58A2A-B254-4A74-8C7B-9B0CA0A9E67A} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
45+
{CC0E8CC8-88F5-4D72-9B3F-0281DD58461A} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
46+
{7323E18C-BF40-4236-9AEF-273A94F3DB03} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
47+
{536A305D-DC57-4E7F-B21B-B8DE916A63C3} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
48+
{50F89560-1449-44E4-844E-72815256534B} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
49+
{8E212A9D-391B-4EFA-943D-7D104A9D3D7E} = {50BA55F5-BD05-4C05-910F-2BFD20BD3465}
50+
{2AED2951-7724-4EFC-8E16-6DF877C6B4A6} = {5725D7DF-DC33-47D2-90C9-D8736C579E77}
51+
{5C580568-6072-4F27-B5C6-FA04556E3B98} = {5725D7DF-DC33-47D2-90C9-D8736C579E77}
52+
{7902A0CA-E94D-4C96-A112-455A1E5E2390} = {5725D7DF-DC33-47D2-90C9-D8736C579E77}
53+
{FA7201FE-097D-4197-BDEC-329986814D8D} = {5725D7DF-DC33-47D2-90C9-D8736C579E77}
54+
{7B4B86A8-EF62-45F0-A431-05F4C11A2E0D} = {55D04C80-4A8F-40AC-967D-3FA77C814D7B}
55+
{6F992337-EAEE-4F7A-BF3B-DDC526F054F7} = {55D04C80-4A8F-40AC-967D-3FA77C814D7B}
56+
{240E7B1C-6D7D-4932-9598-815C2EA420AF} = {55D04C80-4A8F-40AC-967D-3FA77C814D7B}
57+
{B4C5A0BE-3E21-4464-875C-E6EBED176EE3} = {55D04C80-4A8F-40AC-967D-3FA77C814D7B}
58+
{30DEAC25-AFDB-4E91-90A4-7B94E1809C59} = {55D04C80-4A8F-40AC-967D-3FA77C814D7B}
59+
EndGlobalSection
60+
GlobalSection(ExtensibilityGlobals) = postSolution
61+
SolutionGuid = {810D114A-26F4-4151-9EFE-29A7F1BF62AA}
62+
EndGlobalSection
63+
EndGlobal
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Microsoft.Extensions.Diagnostics.Abstractions
2+
3+
`Microsoft.Extensions.Diagnostics.Abstractions` includes the various abstraction types for telemetry, such as IMeterFactory.
4+
5+
Commonly Used Types:
6+
- Microsoft.Extensions.Metrics.IMeterFactory
7+
8+
## Contribution Bar
9+
- [x] [We consider new features, new APIs, bug fixes, and performance changes](https://github.com/dotnet/runtime/tree/main/src/libraries#contribution-bar)
10+
11+
The APIs and functionality are mature, but do get extended occasionally.
12+
13+
## Deployment
14+
[Microsoft.Extensions.Diagnostics.Abstractions](https://www.nuget.org/packages/Microsoft.Extensions.Diagnostics.Abstractions) is included in the ASP.NET Core shared framework. The package is deployed as out-of-band (OOB) too and can be referenced into projects directly.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
namespace Microsoft.Extensions.Diagnostics.Metrics
5+
{
6+
public interface IMeterFactory : System.IDisposable
7+
{
8+
System.Diagnostics.Metrics.Meter Create(System.Diagnostics.Metrics.MeterOptions options);
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
5+
<CLSCompliant>false</CLSCompliant>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<Compile Include="Microsoft.Extensions.Diagnostics.Abstractions.cs" />
10+
</ItemGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="$(LibrariesProjectRoot)System.Diagnostics.DiagnosticSource\ref\System.Diagnostics.DiagnosticSource.csproj" />
14+
</ItemGroup>
15+
16+
</Project>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System;
5+
using System.Diagnostics.Metrics;
6+
7+
namespace Microsoft.Extensions.Diagnostics.Metrics
8+
{
9+
/// <summary>
10+
/// A factory for creating <see cref="Meter"/> instances.
11+
/// </summary>
12+
/// <remarks>
13+
/// Meter factories will be accountable for the following responsibilities:
14+
/// - Creating a new meter.
15+
/// - Attaching the factory instance as a scope to the Meter constructor for all created Meter objects.
16+
/// - Storing created meters in a cache and returning a cached instance if a meter with the same parameters (name, version, and tags) is requested.
17+
/// - Disposing of all cached Meter objects upon factory disposal.
18+
/// </remarks>
19+
public interface IMeterFactory : IDisposable
20+
{
21+
/// <summary>
22+
/// Creates a new <see cref="Meter"/> instance.
23+
/// </summary>
24+
/// <param name="options">The <see cref="MeterOptions"/> to use when creating the meter.</param>
25+
/// <returns>A new <see cref="Meter"/> instance.</returns>
26+
/// <remarks>
27+
/// The <see cref="Meter"/> instance returned by this method should be cached by the factory and returned for subsequent requests for a meter with the same parameters (name, version, and tags).
28+
/// </remarks>
29+
Meter Create(MeterOptions options);
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
5+
<EnableDefaultItems>true</EnableDefaultItems>
6+
<CLSCompliant>false</CLSCompliant>
7+
<!-- Disabling baseline validation since this is a brand new package.
8+
Once this package has shipped a stable version, the following line
9+
should be removed in order to re-enable validation. -->
10+
<DisablePackageBaselineValidation>true</DisablePackageBaselineValidation>
11+
<IsPackable>true</IsPackable>
12+
<PackageDescription>Abstraction types such as IMeterFactory are employed by the telemetry framework extensions.</PackageDescription>
13+
</PropertyGroup>
14+
15+
<ItemGroup>
16+
<ProjectReference Include="$(LibrariesProjectRoot)System.Diagnostics.DiagnosticSource\src\System.Diagnostics.DiagnosticSource.csproj" />
17+
</ItemGroup>
18+
19+
</Project>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
Microsoft Visual Studio Solution File, Format Version 12.00
2+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE}"
3+
EndProject
4+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics", "ref\Microsoft.Extensions.Diagnostics.csproj", "{EF75497C-6CB7-4471-980A-619EA1AB8CF6}"
5+
EndProject
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics", "src\Microsoft.Extensions.Diagnostics.csproj", "{09E28D94-B771-48EB-800C-5A80C2C0055C}"
7+
EndProject
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.Tests", "tests\Microsoft.Extensions.Diagnostics.Tests.csproj", "{43DBAD84-A865-4F5F-AB76-7F3EB6784E99}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{76DC9C4C-EE53-47E6-B6BF-7B135EA8CAF3}"
11+
EndProject
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{9BF048D0-411D-4C2A-8C32-3A3255501D27}"
13+
EndProject
14+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A447D0CB-601B-479E-A2B2-76E48F5D4D61}"
15+
EndProject
16+
Global
17+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
18+
Debug|Any CPU = Debug|Any CPU
19+
Release|Any CPU = Release|Any CPU
20+
EndGlobalSection
21+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
22+
{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{EF75497C-6CB7-4471-980A-619EA1AB8CF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{EF75497C-6CB7-4471-980A-619EA1AB8CF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{EF75497C-6CB7-4471-980A-619EA1AB8CF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{EF75497C-6CB7-4471-980A-619EA1AB8CF6}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{09E28D94-B771-48EB-800C-5A80C2C0055C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31+
{09E28D94-B771-48EB-800C-5A80C2C0055C}.Debug|Any CPU.Build.0 = Debug|Any CPU
32+
{09E28D94-B771-48EB-800C-5A80C2C0055C}.Release|Any CPU.ActiveCfg = Release|Any CPU
33+
{09E28D94-B771-48EB-800C-5A80C2C0055C}.Release|Any CPU.Build.0 = Release|Any CPU
34+
{43DBAD84-A865-4F5F-AB76-7F3EB6784E99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35+
{43DBAD84-A865-4F5F-AB76-7F3EB6784E99}.Debug|Any CPU.Build.0 = Debug|Any CPU
36+
{43DBAD84-A865-4F5F-AB76-7F3EB6784E99}.Release|Any CPU.ActiveCfg = Release|Any CPU
37+
{43DBAD84-A865-4F5F-AB76-7F3EB6784E99}.Release|Any CPU.Build.0 = Release|Any CPU
38+
{87AA8A4F-2785-4E1D-BAB2-3C6414C8D387}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39+
{87AA8A4F-2785-4E1D-BAB2-3C6414C8D387}.Debug|Any CPU.Build.0 = Debug|Any CPU
40+
{87AA8A4F-2785-4E1D-BAB2-3C6414C8D387}.Release|Any CPU.ActiveCfg = Release|Any CPU
41+
{87AA8A4F-2785-4E1D-BAB2-3C6414C8D387}.Release|Any CPU.Build.0 = Release|Any CPU
42+
{959348BC-2D38-41F4-9F3D-2E1CD18D9477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43+
{959348BC-2D38-41F4-9F3D-2E1CD18D9477}.Debug|Any CPU.Build.0 = Debug|Any CPU
44+
{959348BC-2D38-41F4-9F3D-2E1CD18D9477}.Release|Any CPU.ActiveCfg = Release|Any CPU
45+
{959348BC-2D38-41F4-9F3D-2E1CD18D9477}.Release|Any CPU.Build.0 = Release|Any CPU
46+
EndGlobalSection
47+
GlobalSection(SolutionProperties) = preSolution
48+
HideSolutionNode = FALSE
49+
EndGlobalSection
50+
GlobalSection(NestedProjects) = preSolution
51+
{B6663ACE-6FE4-4BB4-8B35-AB98EF62EAAE} = {76DC9C4C-EE53-47E6-B6BF-7B135EA8CAF3}
52+
{43DBAD84-A865-4F5F-AB76-7F3EB6784E99} = {76DC9C4C-EE53-47E6-B6BF-7B135EA8CAF3}
53+
{EF75497C-6CB7-4471-980A-619EA1AB8CF6} = {9BF048D0-411D-4C2A-8C32-3A3255501D27}
54+
{09E28D94-B771-48EB-800C-5A80C2C0055C} = {A447D0CB-601B-479E-A2B2-76E48F5D4D61}
55+
{87AA8A4F-2785-4E1D-BAB2-3C6414C8D387} = {069D6714-DE43-45C4-BABC-C8246B974CA7}
56+
{959348BC-2D38-41F4-9F3D-2E1CD18D9477} = {069D6714-DE43-45C4-BABC-C8246B974CA7}
57+
EndGlobalSection
58+
GlobalSection(ExtensibilityGlobals) = postSolution
59+
SolutionGuid = {7D279EE5-E38F-4125-AE82-6ADE52D72F26}
60+
EndGlobalSection
61+
EndGlobal
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Microsoft.Extensions.Diagnostics
2+
3+
`Microsoft.Extensions.Diagnostics` contains the default implementation of meter factory and extension methods for registering this default meter factory to the DI.
4+
5+
Commonly Used APIS:
6+
- MetricsServiceExtensions.AddMetrics(this IServiceCollection services)
7+
- MeterFactoryExtensions.Create(this IMeterFactory, string name, string? version = null, IEnumerable<KeyValuePair<string,object?>> tags = null, object? scope = null)
8+
9+
## Contribution Bar
10+
- [x] [We consider new features, new APIs, bug fixes, and performance changes](https://github.com/dotnet/runtime/tree/main/src/libraries#contribution-bar)
11+
12+
The APIs and functionality are mature, but do get extended occasionally.
13+
14+
## Deployment
15+
[Microsoft.Extensions.Diagnostics](https://www.nuget.org/packages/Microsoft.Extensions.Diagnostics) is included in the ASP.NET Core shared framework. The package is deployed as out-of-band (OOB) too and can be referenced into projects directly.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
namespace Microsoft.Extensions.Diagnostics.Metrics
5+
{
6+
public static class MetricsServiceExtensions
7+
{
8+
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) { return null!; }
9+
}
10+
public static class MeterFactoryExtensions
11+
{
12+
public static System.Diagnostics.Metrics.Meter Create(this Microsoft.Extensions.Diagnostics.Metrics.IMeterFactory meterFactory, string name, string? version = null, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object?>>? tags = null, object? scope = null) { return null!; }
13+
}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
5+
<CLSCompliant>false</CLSCompliant>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<Compile Include="Microsoft.Extensions.Diagnostics.cs" />
10+
</ItemGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="$(LibrariesProjectRoot)System.Diagnostics.DiagnosticSource\ref\System.Diagnostics.DiagnosticSource.csproj" />
14+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Diagnostics.Abstractions\ref\Microsoft.Extensions.Diagnostics.Abstractions.csproj" />
15+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.DependencyInjection.Abstractions\ref\Microsoft.Extensions.DependencyInjection.Abstractions.csproj" />
16+
</ItemGroup>
17+
18+
</Project>

0 commit comments

Comments
 (0)