Существуют ли какие-либо формализованные целевые рамочные директивы? - PullRequest
1 голос
/ 09 июня 2019

Я прочитал статью Microsoft о том, как определить целевую платформу, например:

netcoreapp2.2
net47
net58 

Но есть ситуации, когда мне все равноо точной версии, но общая цель фреймворка:

NETCORE
.Net Framework

Но я не нашел такие флаги.

Вопрос:

Есть ли обобщенные флаги для этого?или лучше, как я могу различить эти два без указания всех параметров?

1 Ответ

5 голосов
/ 15 июля 2019

Помимо директив для конкретных версий, которые вас не интересуют, в документации Target frameworks перечислены следующие символы препроцессора:

  • NETFRAMEWORK

  • NETSTANDARD

  • NETCOREAPP

Я проверял и проверял следующее .csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   
    <TargetFrameworks>netstandard1.5;netstandard2.0;net48;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>
</Project>

и класс C #:

namespace ClassLibrary1
{
    public class Class1
    {
        public void Test()
        {
#if NETFRAMEWORK
            System.Console.WriteLine(".NET Framework");
#elif NETCOREAPP
            System.Console.WriteLine(".NET Core");
#elif NETSTANDARD
            System.Console.WriteLine(".NET Standard");
#endif
        }
    }
}

И они работают как положено. Вот выбранный .NET Core 3.0, область NETCOREAPP 'live', а остальные выделены серым цветом:

enter image description here

[Использование Visual Studio 2019 (v16.2.0 Preview 3)]


В статье также говорится:

Система сборки знает символы препроцессора, представляющие целевые платформы, показанные в поддерживаемых версиях целевых структур Таблица. При использовании символа, представляющего стандарт .NET или .NET Основной TFM, замените точку подчеркиванием и измените строчные буквы в верхнем регистре (например, символ для netstandard1.4 является NETSTANDARD1_4

... и в таблице также можно найти не версионные символы для .NET Micro Framework (NETMF), Windows Phone (WP) и универсальной платформы Windows (UAP).

...