从.NET标准库获取Windows系统目录

时间:2017-03-10 02:11:25

标签: c# windows .net-core .net-standard

似乎是一个简单的问题,但Google似乎没有给我一个答案。

在.NET Framework中,我们可以使用Environment.SystemDirectory来获取系统目录(看起来像C:\WINDOWS\System32),但是当前版本的.NET Standard或者该属性不存在。 NET核心。有没有办法在.NET标准(或失败的.NET Core)库中获取该文件夹?

出于我的目的,不要求调用在非Windows平台上返回有用的东西(无论如何它会返回什么?/lib/usr/lib?等等),尽管我猜它会如果它真的很酷。

现在似乎我最好的选择是尝试直接使用C:\WINDOWS\System32,如果不存在,那么尝试使用C:\WinNT\System32,但感觉就像这样做了那样。

1 个答案:

答案 0 :(得分:5)

.Net Core 2.0 (and .Net Standard 2.0) will contain Environment.SystemDirectory,但目前的1.x版本没有。

虽然该属性仍然以internal的形式存在,但如果您愿意依赖非公开代码,则可以使用反射来访问它:

using System;
using System.Reflection;
using static System.Reflection.BindingFlags;

…

var systemDirectory = typeof(Environment).GetProperty("SystemDirectory", NonPublic | Static)
    .GetValue(null, null);

在运行.Net Core 1.1.1的.Net Core SDK 1.0的Windows 10计算机上,返回C:\WINDOWS\system32。在Ubuntu 16.04上运行相同的代码会生成NullReferenceException