C# 隔离单声道特定代码

C# 隔离单声道特定代码,c#,mono,C#,Mono,我正在玩向Windows.Forms应用程序添加Gtk#GUI的游戏。我需要一种在Program.cs中隔离单声道特定代码的方法,因为我希望避免创建单独的.sln/.csproj。在C/C++/Objective-C项目中,我会做一些类似于\ifdef\uuuu APPLE\uuu或\ifdef\uwin32的事情 C#似乎有#if命令 隔离单声道特定代码或Visual Studio特定代码的典型方法是什么?您可以使用\define定义符号,并使用\if和\else检查符号 还可以使用编译器选项

我正在玩向Windows.Forms应用程序添加Gtk#GUI的游戏。我需要一种在
Program.cs
中隔离单声道特定代码的方法,因为我希望避免创建单独的.sln/.csproj。在C/C++/Objective-C项目中,我会做一些类似于
\ifdef\uuuu APPLE\uuu
\ifdef\uwin32
的事情

C#似乎有
#if
命令


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

您可以使用
\define
定义符号,并使用
\if
\else
检查符号

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

请参阅C#预处理器指令的完整列表


根据SO的回答,mono编译器定义了一个
\uuuuu monos\uuuuu
符号,因此以下代码可以工作:

#if __MonoCS__
 //mono specific code
#else 
 //other code
#endif

Mono“移植到Windows”指南的推荐方法(如中所述)是:


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

是否有这样一个只存在于VS或Mono上的内置指令?我试图不改变项目文件:-)@Ivan-根据SO的回答,它定义了
\uuuuu monos\uuuuu
。我不知道你是怎么找到的,我花了时间找到了答案,但什么也没有找到:-)我会选择答案中提到的
类型。GetType()
路线。谢谢!…除非这意味着MSVC仍然会看到GTK代码的引用。所以
#如果uuu monos uuu
是这样的话。再次感谢@skolima-添加了链接答案的详细信息。但是,您需要考虑的是,一些用例需要编译时分辨率与在链接到的答案中详细说明的运行时解决方案。请不要使用“如果”,而是检查如何生成可移植的程序集:@ Skulima,OP希望做出编译时的决定,而不是运行时的决定。code>#if和
[自定义属性]
是唯一的方法。
#if __MonoCS__
 //mono specific code
#else 
 //other code
#endif
public static bool IsRunningOnMono ()
{
    return Type.GetType ("Mono.Runtime") != null;
}