Environment.MachineName equivalent for .NET Standard 1.4

yitzih picture yitzih · May 14, 2017 · Viewed 11.6k times · Source

I am creating a class library that will be used in a WPF project and a .NET Core project. I am trying to get the name of the machine using my application.

In both .NET Core and the WPF application I can use Environment.MachineName value. However in my .NET Standard Class library I cannot.

I get the following error:

'Environment' does not contain a definition for 'MachineName'

I tried doing what the answer suggested in this question but when I try to add System.Windows.Networking.Connectivity.NetworkInformation.GetHostNames() I get the following error:

The name 'Windows' does not exist in the current context

I assume that this only works for Windows 10 Universal Apps? Either way I would prefer a platform independent way of getting the machine name (this way seems like its meant for windows machines only)

Answer

Martin Ullrich picture Martin Ullrich · May 14, 2017

Environment.MachineName is only available in .NET Standard > 1.5 using the System.Runtime.Extensions NuGet package (in .NET Standard 2.0 it is available automatically).

As an alternative, you can either use System.Net.Dns.GetHostName() by referencing the System.Net.NameResolution NuGet package or resolve the COMPUTERNAME (win) or HOSTNAME (*nix) environment variables via Environment.GetEnvironmentVariable("COMPUTERNAME").