Изолировать моно-специфичный код - PullRequest
20 голосов
/ 01 марта 2011

Я играю с добавлением Gtk # GUI в приложение Windows.Forms.Мне нужен способ изолировать моно-специфичный код в Program.cs, так как я хотел бы избежать создания отдельного .sln / .csproj.В проектах C / C ++ / Objective-C я бы делал что-то похожее на #ifdef __APPLE__ или #ifdef _WIN32.

C #, похоже, имеет команду #if.

Каков типичный способ выделения моно-специфичного кода или кода Visual Studio?

1 Ответ

36 голосов
/ 01 марта 2011

Вы можете определить символ с помощью #define и проверить его, используя #if и #else.

Вы также можете передать символ компилятору, используя опцию компилятора /define.

См. Полный список директив препроцессора C # здесь .

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

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

Согласно этому SO-ответу, моно-компилятор определяет символ __MonoCS__, поэтому будет работать следующее:

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

Рекомендуемый метод, которым руководствуется Mono «Портирование в Windows», как описано в этом ответе от @ Mystic , таков:

public static bool IsRunningOnMono ()
{
    return Type.GetType ("Mono.Runtime") != null;
}

Это, конечно, проверка во время выполнения по сравнению с проверкой времени компиляции , описанной выше, поэтому может не работать для вашего конкретного случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...