Skip to content

Commit 7da3e59

Browse files
authored
feat: Log a warning when an unsupported .NET version is detected. (#1852)
1 parent 6524915 commit 7da3e59

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

src/Agent/NewRelic/Agent/Core/NewRelic.Agent.Core/AgentManager.cs

+13-2
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,15 @@ private void LogInitialized()
268268

269269
foreach (var ev in environmentVariables)
270270
{
271-
if (!String.IsNullOrEmpty(System.Environment.GetEnvironmentVariable(ev)))
271+
if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable(ev)))
272272
{
273273
Log.DebugFormat("Environment Variable {0} value: {1}", ev, System.Environment.GetEnvironmentVariable(ev));
274274
}
275275
}
276276

277277
foreach (var evs in environmentVariablesSensitive)
278278
{
279-
if (!String.IsNullOrEmpty(System.Environment.GetEnvironmentVariable(evs)))
279+
if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable(evs)))
280280
{
281281
Log.DebugFormat("Environment Variable {0} is configured with a value. Not logging potentially sensitive value", evs);
282282
}
@@ -285,6 +285,17 @@ private void LogInitialized()
285285
Log.Debug($".NET Runtime Version: {RuntimeInformation.FrameworkDescription}");
286286
}
287287

288+
#if NETFRAMEWORK
289+
if (NewRelic.Core.DotnetVersion.IsUnsupportedDotnetFrameworkVersion(AgentInstallConfiguration.DotnetFrameworkVersion))
290+
{
291+
Log.WarnFormat("Unsupported installed .NET Framework version {0} dectected. Please use a version of .NET Framework >= 4.6.2.", AgentInstallConfiguration.DotnetFrameworkVersion);
292+
}
293+
#else
294+
if (NewRelic.Core.DotnetVersion.IsUnsupportedDotnetCoreVersion(AgentInstallConfiguration.DotnetCoreVersion))
295+
{
296+
Log.WarnFormat("Unsupported .NET version {0} detected. Please use a version of .NET >= net6.", AgentInstallConfiguration.DotnetCoreVersion);
297+
}
298+
#endif
288299
}
289300

290301
private void StartServices()

src/NewRelic.Core/DotnetVersion.cs

+26
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using Microsoft.Win32;
66
#endif
77

8+
using System.Collections.Generic;
9+
810
namespace NewRelic.Core
911
{
1012
public enum DotnetFrameworkVersion
@@ -122,5 +124,29 @@ public static DotnetCoreVersion GetDotnetCoreVersion()
122124
return DotnetCoreVersion.Other;
123125
}
124126
#endif
127+
128+
public static bool IsUnsupportedDotnetCoreVersion(DotnetCoreVersion version)
129+
{
130+
// Newer versions of .net will be flagged as Other until we update our version checking logic.
131+
// So we can either check against a supported list, or an unsupported list, but the supported list
132+
// is smaller.
133+
var supportedDotnetCoreVersions = new List<DotnetCoreVersion> { DotnetCoreVersion.net6, DotnetCoreVersion.net7, DotnetCoreVersion.Other };
134+
return !supportedDotnetCoreVersions.Contains(version);
135+
}
136+
137+
public static bool IsUnsupportedDotnetFrameworkVersion(DotnetFrameworkVersion version)
138+
{
139+
// For .net framework we can maintain a list of unsupported versions to check against
140+
// so that newer versions of .net framework will not be listed as an unsupported version.
141+
var unsupportedDotnetFrameworkVersions = new List<DotnetFrameworkVersion> {
142+
DotnetFrameworkVersion.LessThan45,
143+
DotnetFrameworkVersion.net45,
144+
DotnetFrameworkVersion.net451,
145+
DotnetFrameworkVersion.net452,
146+
DotnetFrameworkVersion.net46,
147+
DotnetFrameworkVersion.net461
148+
};
149+
return unsupportedDotnetFrameworkVersions.Contains(version);
150+
}
125151
}
126152
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2020 New Relic, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
using NUnit.Framework;
5+
6+
namespace NewRelic.Core.Tests
7+
{
8+
[TestFixture]
9+
public class DotnetVersionTests
10+
{
11+
[TestCase(DotnetCoreVersion.LessThan30, ExpectedResult = true)]
12+
[TestCase(DotnetCoreVersion.netcoreapp30, ExpectedResult = true)]
13+
[TestCase(DotnetCoreVersion.netcoreapp31, ExpectedResult = true)]
14+
[TestCase(DotnetCoreVersion.net5, ExpectedResult = true)]
15+
[TestCase(DotnetCoreVersion.net6, ExpectedResult = false)]
16+
[TestCase(DotnetCoreVersion.net7, ExpectedResult = false)]
17+
[TestCase(DotnetCoreVersion.Other, ExpectedResult = false)]
18+
public bool IsUnsupportedDotnetCoreVersion(DotnetCoreVersion version)
19+
{
20+
return DotnetVersion.IsUnsupportedDotnetCoreVersion(version);
21+
}
22+
23+
[TestCase(DotnetFrameworkVersion.LessThan45, ExpectedResult = true)]
24+
[TestCase(DotnetFrameworkVersion.net45, ExpectedResult = true)]
25+
[TestCase(DotnetFrameworkVersion.net451, ExpectedResult = true)]
26+
[TestCase(DotnetFrameworkVersion.net452, ExpectedResult = true)]
27+
[TestCase(DotnetFrameworkVersion.net46, ExpectedResult = true)]
28+
[TestCase(DotnetFrameworkVersion.net461, ExpectedResult = true)]
29+
[TestCase(DotnetFrameworkVersion.net462, ExpectedResult = false)]
30+
[TestCase(DotnetFrameworkVersion.net47, ExpectedResult = false)]
31+
[TestCase(DotnetFrameworkVersion.net471, ExpectedResult = false)]
32+
[TestCase(DotnetFrameworkVersion.net472, ExpectedResult = false)]
33+
[TestCase(DotnetFrameworkVersion.net48, ExpectedResult = false)]
34+
[TestCase(DotnetFrameworkVersion.net481, ExpectedResult = false)]
35+
public bool IsUnsupportedDotnetFrameworkVersion(DotnetFrameworkVersion version)
36+
{
37+
return DotnetVersion.IsUnsupportedDotnetFrameworkVersion(version);
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)