【发布时间】:2017-03-10 02:11:24
【问题描述】:
似乎是一个简单的问题,但 Google 似乎没有给我答案。
在 .NET Framework 中,我们可以使用 Environment.SystemDirectory 来获取系统目录(类似于 C:\WINDOWS\System32),但该属性在当前版本的 .NET Standard 或 .NET Core 中不存在。有没有办法在 .NET Standard(或失败的 .NET Core)库中获取该文件夹?
出于我的目的,该调用不需要返回在非 Windows 平台上有用的东西(无论如何它会返回什么?/lib?/usr/lib?等等),尽管我想如果它会很酷做了。
现在看来我最好的选择是尝试直接使用C:\WINDOWS\System32,如果不存在,则尝试使用C:\WinNT\System32,但这样做感觉就像一个黑客。
【问题讨论】:
-
Windows 可以安装在其他驱动器上,不能硬编码 c:\
-
但是定位那个文件夹的目的是什么? .NET Standard 类库应该假定自己在任何平台上运行,而不仅仅是 Windows。
-
@LexLi 我认为 .Net 标准库可以包含一些特定于平台的代码,只要它确保此类代码仅在正确的平台上运行,例如使用
RuntimeInformation.IsOSPlatform(Windows)。跨度> -
在引用系统目录时要小心,这样做的正当理由很少,而且很容易得到仅适用于某些 Windows 版本或在意外情况下失败的代码。特别是在 64 位 Windows 上,如果您的代码最终作为 32 位应用程序运行(可能是因为它是从一个应用程序启动的),您将在不知不觉中查看 syswow64 目录。
标签: c# windows .net-core .net-standard