Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Deprecated Microsoft.Extensions.PlatformAbstractions #315

Merged
merged 1 commit into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/Exceptionless/Exceptionless.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'" Label="Package References">
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
</ItemGroup>

Expand Down
76 changes: 3 additions & 73 deletions src/Exceptionless/Plugins/Default/080_VersionPlugin.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using System;
using System.Linq;
using System.Reflection;
using Exceptionless.Logging;
using Exceptionless.Models;
using Exceptionless.Utility;

namespace Exceptionless.Plugins.Default {
[Priority(80)]
Expand Down Expand Up @@ -40,10 +39,10 @@ private string GetVersion(IExceptionlessLog log) {
if (_appVersionLoaded)
return _appVersion;

var entryAssembly = GetEntryAssembly(log);
var entryAssembly = AssemblyHelper.GetEntryAssembly(log);

try {
string version = GetVersionFromAssembly(entryAssembly);
string version = AssemblyHelper.GetVersionFromAssembly(entryAssembly);
if (!String.IsNullOrEmpty(version)) {
_appVersion = version;
_appVersionLoaded = true;
Expand All @@ -54,80 +53,11 @@ private string GetVersion(IExceptionlessLog log) {
log.FormattedError(typeof(VersionPlugin), ex, "Unable to get version from loaded assemblies. Error: {0}", ex.Message);
}

#if NETSTANDARD2_0
try {
var platformService = Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default;

_appVersion = platformService.Application.ApplicationVersion;
_appVersionLoaded = true;

return _appVersion;
} catch (Exception ex) {
log.FormattedError(typeof(VersionPlugin), ex, "Unable to get Platform Services instance. Error: {0}", ex.Message);
}
#endif

_appVersion = null;
_appVersionLoaded = true;

return null;
}

private string GetVersionFromAssembly(Assembly assembly) {
if (assembly == null)
return null;

string version = assembly.GetInformationalVersion();
if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0"))
version = assembly.GetFileVersion();

if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0"))
version = assembly.GetVersion();

if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0")) {
var assemblyName = assembly.GetAssemblyName();
version = assemblyName != null ? assemblyName.Version.ToString() : null;
}

return !String.IsNullOrEmpty(version) && !String.Equals(version, "0.0.0.0") ? version : null;
}

private Assembly GetEntryAssembly(IExceptionlessLog log) {
var entryAssembly = Assembly.GetEntryAssembly();
if (IsUserAssembly(entryAssembly))
return entryAssembly;

try {
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a =>
!a.IsDynamic
&& a != typeof(ExceptionlessClient).GetTypeInfo().Assembly
&& a != GetType().GetTypeInfo().Assembly
&& a != typeof(object).GetTypeInfo().Assembly);

return assemblies.FirstOrDefault(a => IsUserAssembly(a));
} catch (Exception ex) {
log.FormattedError(typeof(VersionPlugin), ex, "Unable to get entry assembly. Error: {0}", ex.Message);
}

return null;
}

private bool IsUserAssembly(Assembly assembly) {
if (assembly == null)
return false;

if (!String.IsNullOrEmpty(assembly.FullName) && (assembly.FullName.StartsWith("System.") || assembly.FullName.StartsWith("Microsoft.")))
return false;

string company = assembly.GetCompany() ?? String.Empty;
string[] nonUserCompanies = new[] { "Exceptionless", "Microsoft" };
if (nonUserCompanies.Any(c => company.IndexOf(c, StringComparison.OrdinalIgnoreCase) >= 0))
return false;

if (assembly.FullName == typeof(ExceptionlessClient).GetTypeInfo().Assembly.FullName)
return false;

return true;
}
}
}
26 changes: 14 additions & 12 deletions src/Exceptionless/Services/DefaultEnvironmentInfoCollector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Threading;
using Exceptionless.Logging;
using Exceptionless.Models.Data;
using Exceptionless.Utility;

namespace Exceptionless.Services {
public class DefaultEnvironmentInfoCollector : IEnvironmentInfoCollector {
Expand Down Expand Up @@ -154,31 +157,30 @@ private void PopulateRuntimeInfo(EnvironmentInfo info) {
}
}

#if NETSTANDARD
Microsoft.Extensions.PlatformAbstractions.PlatformServices computerInfo = null;
#elif NET45
#if NET45
Microsoft.VisualBasic.Devices.ComputerInfo computerInfo = null;
#endif

try {
#if NETSTANDARD
computerInfo = Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default;
#elif NET45
computerInfo = new Microsoft.VisualBasic.Devices.ComputerInfo();
#endif
} catch (Exception ex) {
Log.FormattedWarn(typeof(DefaultEnvironmentInfoCollector), "Unable to get computer info. Error message: {0}", ex.Message);
}

if (computerInfo == null)
return;
#endif

try {
#if NETSTANDARD
info.RuntimeVersion = computerInfo.Application.RuntimeFramework.Version.ToString();
info.Data["ApplicationBasePath"] = computerInfo.Application.ApplicationBasePath;
info.Data["ApplicationName"] = computerInfo.Application.ApplicationName;
info.Data["RuntimeFramework"] = computerInfo.Application.RuntimeFramework.FullName;
info.RuntimeVersion = Environment.Version.ToString();
info.Data["ApplicationBasePath"] = AppContext.BaseDirectory ?? AppDomain.CurrentDomain.BaseDirectory;


var entryAssembly = AssemblyHelper.GetEntryAssembly(Log);
if (entryAssembly != null) {
info.Data["ApplicationName"] = entryAssembly.GetName().Name;
info.Data["RuntimeFramework"] = entryAssembly.GetCustomAttribute<TargetFrameworkAttribute>()?.FrameworkName;
}
#elif NET45
info.OSName = computerInfo.OSFullName;
info.OSVersion = computerInfo.OSVersion;
Expand Down
57 changes: 57 additions & 0 deletions src/Exceptionless/Utility/AssemblyHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,63 @@ public static Assembly GetRootAssembly() {
return Assembly.GetEntryAssembly();
}

public static Assembly GetEntryAssembly(IExceptionlessLog log) {
var entryAssembly = Assembly.GetEntryAssembly();
if (IsUserAssembly(entryAssembly))
return entryAssembly;

try {
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a =>
!a.IsDynamic
&& a != typeof(ExceptionlessClient).GetTypeInfo().Assembly
&& a != typeof(object).GetTypeInfo().Assembly);

return assemblies.FirstOrDefault(a => IsUserAssembly(a));
}
catch (Exception ex) {
log.FormattedError(typeof(AssemblyHelper), ex, "Unable to get entry assembly. Error: {0}", ex.Message);
}

return null;
}

private static bool IsUserAssembly(Assembly assembly) {
if (assembly == null)
return false;

if (!String.IsNullOrEmpty(assembly.FullName) && (assembly.FullName.StartsWith("System.") || assembly.FullName.StartsWith("Microsoft.")))
return false;

string company = assembly.GetCompany() ?? String.Empty;
string[] nonUserCompanies = new[] { "Exceptionless", "Microsoft" };
if (nonUserCompanies.Any(c => company.IndexOf(c, StringComparison.OrdinalIgnoreCase) >= 0))
return false;

if (assembly.FullName == typeof(ExceptionlessClient).GetTypeInfo().Assembly.FullName)
return false;

return true;
}

public static string GetVersionFromAssembly(Assembly assembly) {
if (assembly == null)
return null;

string version = assembly.GetInformationalVersion();
if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0"))
version = assembly.GetFileVersion();

if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0"))
version = assembly.GetVersion();

if (String.IsNullOrEmpty(version) || String.Equals(version, "0.0.0.0")) {
var assemblyName = assembly.GetAssemblyName();
version = assemblyName != null ? assemblyName.Version.ToString() : null;
}

return !String.IsNullOrEmpty(version) && !String.Equals(version, "0.0.0.0") ? version : null;
}

public static string GetAssemblyTitle() {
// Get all attributes on this assembly
var assembly = GetRootAssembly();
Expand Down
Loading