隔离单一特定代码

Iva*_*ica 20 c# mono

我正在玩Gtk#GUI到Windows.Forms应用程序.我需要一种方法来隔离特定于Mono的代码,Program.cs因为我想避免创建单独的.sln/.csproj.在C/C++/Objective-C项目中,我会做类似于#ifdef __APPLE__或的事情#ifdef _WIN32.

C#似乎有#if命令.

隔离Mono特定代码或Visual Studio特定代码的典型方法是什么?

Ode*_*ded 36

您可以通过定义一个符号#define和对证,使用#if#else.

您还可以使用/define编译器选项将符号传递给编译器.

请在此处查看C#预处理程序指令的完整列表.

#define MONO // Or pass in "/define MONO" to csc 

#if MONO
 //mono specific code
#else 
 //other code
#endif
Run Code Online (Sandbox Code Playgroud)

根据这个 SO答案,单声道编译器定义了一个__MonoCS__符号,因此以下内容可行:

#if __MonoCS__
 //mono specific code
#else 
 //other code
#endif
Run Code Online (Sandbox Code Playgroud)

推荐的方法是,单声道"移植到Windows"指南,如详细介绍这个答案@Mystic是:

public static bool IsRunningOnMono ()
{
    return Type.GetType ("Mono.Runtime") != null;
}
Run Code Online (Sandbox Code Playgroud)

当然,这是运行时检查,而不是上面的编译时检查,因此可能不适用于您的特定情况.

  • @Ivan - 根据[this](http://stackoverflow.com/questions/329043/how-can-i-conditional-compile-my-c-for-mono-vs-microsoft-net/329072#329072)SO回答,它定义了`__MonoCS__`. (2认同)