Символ целевой структуры не определен - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь использовать директиву компилятора if для условного включения некоторого кода, который требуется для более ранних версий .Net Framework, но не для более поздних версий.

Я использовал следующие ссылки из MSDN, ссылка # if в директиве компилятора , и ссылка Target Frameworks .

Я создаю приложение .Net 4.5.1, но символ NET451 не 'Похоже, он не определен, как и другие.

Я адаптировал пример из статьи MSDN Target Frameworks, чтобы включить все символы инфраструктуры, чтобы я мог видеть, какой из них определен.

#if NET20
        Console.WriteLine("Target framework: NET20");
#elif NET35
        Console.WriteLine("Target framework: NET35");
#elif NET40
        Console.WriteLine("Target framework: NET40");
#elif NET45
        Console.WriteLine("Target framework: NET45");
#elif NET451
        Console.WriteLine("Target framework: NET451");
#elif NET452
        Console.WriteLine("Target framework: NET452");
#elif NET46
        Console.WriteLine("Target framework: NET46");
#elif NET461
        Console.WriteLine("Target framework: NET461");
#elif NET462
        Console.WriteLine("Target framework: NET462");
#elif NET47
        Console.WriteLine("Target framework: NET47");
#elif NET471
        Console.WriteLine("Target framework: NET471");
#elif NET472
        Console.WriteLine("Target framework: NET472");
#elif NETSTANDARD1_0
        Console.WriteLine("Target framework: NETSTANDARD1_0");
#elif NETSTANDARD1_1
        Console.WriteLine("Target framework: NETSTANDARD1_1");
#elif NETSTANDARD1_2
        Console.WriteLine("Target framework: NETSTANDARD1_2");
#elif NETSTANDARD1_3
        Console.WriteLine("Target framework: NETSTANDARD1_3");
#elif NETSTANDARD1_4
        Console.WriteLine("Target framework: NETSTANDARD1_4");
#elif NETSTANDARD1_5
        Console.WriteLine("Target framework: NETSTANDARD1_5");
#elif NETSTANDARD1_6
        Console.WriteLine("Target framework: NETSTANDARD1_6");
#elif NETSTANDARD2_0
        Console.WriteLine("Target framework: NETSTANDARD2_0");
#elif NETCOREAPP1_0
        Console.WriteLine("Target framework: NETCOREAPP1_0");
#elif NETCOREAPP1_1
        Console.WriteLine("Target framework: NETCOREAPP1_1");
#elif NETCOREAPP2_0
        Console.WriteLine("Target framework: NETCOREAPP2_0");
#elif NETCOREAPP2_1
        Console.WriteLine("Target framework: NETCOREAPP2_1");
#elif NETCOREAPP2_2
        Console.WriteLine("Target framework: NETCOREAPP2_2");
#else
        Console.WriteLine("Could not tell which framework we're using.");
#endif

В результате получается «Не могу сказать, какую платформу мы используем».

Я что-то не так делаю?Документация неверна?Или я нашел ошибку?

1 Ответ

0 голосов
/ 11 февраля 2019

Эти директивы неявно генерируются только системой сборки для .NET Core.Ключевое слово из документации :

Полный список символов препроцессора для целевых платформ .NET Core:

Итак, при создании нового приложенияили библиотека классов, нацеленная на .NET Framework, директивы будут отсутствовать.Вместо этого создайте библиотеку или приложение Core или .NET Standard.

Если вы не готовы перейти на Core, см. Обнаружение целевой версии платформы во время компиляции для обходных путей - вы можете определить их самостоятельно, например.

...