Подтвердить что ты не робот

Изолировать монотонный код

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

У С# появляется команда #if.

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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