2017-03-10 5 views
4

簡単な質問のようですが、Googleには私の答えがないようです。.NET標準ライブラリからWindowsシステムディレクトリを取得

Environment.SystemDirectoryを使用すると、C:\WINDOWS\System32のようなシステムディレクトリを取得できますが、.NET Standardまたは.NET Coreの現在のバージョンには存在しません。 .NET Standard(または.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 Standardクラスライブラリは、Windowsだけでなく、どのプラットフォームでも動作している必要があります。 –

答えて

5

.Net Core 2.0 (and .Net Standard 2.0) will contain Environment.SystemDirectoryしかし、現在の1.xバージョンはそうではありません。

プロパティはまだinternalとして存在するので、あなたは、非公共のコードに依存しているために喜んでいる場合は、1つの回避策は、リフレクションを使用してアクセスすることですけれども:

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になります。

関連する問題