присвоить значение директиве препроцессора

Либо я не понял директивы препроцессора, либо они не работают.

Я пытаюсь написать приложение для нескольких фреймворков. (DNX451, DNX46, NETSTANDARD1_5,...)

Поэтому мне всегда приходится писать что-то вроде (действительно простой пример, я знаю, что он мне здесь не понадобится)

public class Test
{
#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
    public int? testVar;
#else
    public int testVar;
#endif

    public string Method()
    {
#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
        return (testVar ?? 0).ToString();
#else
        return testVar.ToString();
#endif
    }
}

так есть ли возможность определить переменную? По крайней мере, для каждого файла, поэтому я мог бы сказать, например:

#define NetCore (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)

Так что мне остается только написать

public class Test
{
#if !NetCore
    public int? testVar;
#else
    public int testVar;
#endif
....

было бы намного меньше кода, и я мог бы определить его поверх моего файла.

Или это просто невозможно с директивами препроцессора?


person Matthias Burger    schedule 27.09.2016    source источник
comment
Можете ли вы добавить условное выражение к .csproj?   -  person Caramiriel    schedule 27.09.2016
comment
@Caramiriel хм, это был бы вариант, если действительно нет возможности определить это в коде.   -  person Matthias Burger    schedule 28.09.2016


Ответы (1)


Кажется, это работает для меня (должно быть в верхней части файла):

#if (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
#define NetCore
#endif
person Quantic    schedule 27.09.2016
comment
О, да, теперь... это простое и логичное решение. Иногда пора поспать перед кодированием :D спасибо! Это полностью то, что я искал. - person Matthias Burger; 28.09.2016