我正在编写一个类,希望可以在Windows和Linux上使用。
其中一个方法涉及访问Windows注册表。
我希望实现的目标是,在Linux机器上使用时禁用这个特定的方法。
首先,我进行了一些研究,看看是否有.Net Core可以检查使用的操作系统的内容,我找到了this,它确实有效。
当我将其实施到我的代码中,访问某个方法时,我希望禁用访问Windows注册表的方法,但是最接近的方法是使用switch语句,就像这样
switch (OS)
{
case OSX:
return;
case LINUX:
return
}
如果操作系统不受支持,则使用return
。这个方法可行,但我认为禁止访问比为不支持该特定方法的操作系统抛出错误要好得多。
接着,我研究了预处理指令,认为如果能够检测和禁用代码中的某些部分,依赖于框架等等,也许我可以使用类似的东西来禁用代码中的某些部分,这样即使在尝试访问该方法时,它们也永远无法被调用。
然后我继续探索如何使用预处理指令
禁用代码的某些部分。
我发现了this。
我知道这是针对C++的,但它似乎是我在.Net Core
中找到的最接近我想要实现的内容。
在完美的世界里,它会看起来像这样
/// <summary>
/// Get the file mime type
/// </summary>
/// <param name="filePathLocation">file path location</param>
/// <returns></returns>
`#if WINDOWS`
public static string GetMimeType(this string filePathLocation)
{
if (filePathLocation.IsValidFilePath())
{
string mimeType = "application/unknown";
string ext = Path.GetExtension(filePathLocation).ToLower();
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
if (regKey != null && regKey.GetValue("Content Type") != null)
{
mimeType = regKey.GetValue("Content Type").ToString();
}
return mimeType;
}
return null;
}
`#endif`
我看到了#Define
,因此尝试了类似于这样的内容:#define IS_WINDOWS
,并将其与#if IS_WINDOWS
一起添加到我的类中,
但是,如果我希望只重复使用静态类,我不知道如何更改该值。
#if WINDOWS
会是true,而实际上并不是... - Jérôme MEVEL