2017-03-10 36 views
4

看起來像一個簡單的問題,但Google似乎對我沒有答案。從.NET標準庫中獲取Windows系統目錄

在.NET Framework中,我們可以使用Environment.SystemDirectory來獲取系統目錄(它看起來像C:\WINDOWS\System32),但該屬性在當前版本的.NET Standard或.NET Core中不存在。有沒有辦法讓.NET標準庫中的文件夾(或失敗的.NET Core)庫?

爲了我的目的,並不要求這個調用返回非Windows平臺上有用的東西(並且它會返回什麼?/lib/usr/lib?等等),但我想如果它確實很酷的話。

現在看來我的最佳選擇是直接嘗試使用C:\WINDOWS\System32,如果不存在,那麼嘗試使用C:\WinNT\System32,但感覺就像這樣做。

+0

https://github.com/dotnet/coreclr/blob/release/1.0.0/src/mscorlib/src/System/Environment.cs#L364? – stuartd

+0

Windows可以安裝在其他驅動器上,但不能硬編碼c:\ – Anders

+1

但是,有什麼打算找到該文件夾​​? .NET標準類庫應該假定自己在任何平臺上運行,而不僅僅是Windows。 –

回答

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); 

在我的Windows 10機器。在.Net Core 1.1.1上運行的Net Core SDK 1.0將返回C:\WINDOWS\system32。在Ubuntu 16.04上運行相同的代碼導致NullReferenceException