Search code examples
.netvisual-studio.net-core.net-standardcompiler-directives

Are there any formalized target framework directives?


I've read Microsoft's article about how to detect target framework, for example :

netcoreapp2.2
net47
net58 

But there are situations where I don't care about the exact version, but the general framework target :

NETCORE
.Net Framework

But I didn't find such flags.

Question:

Are there any generalized flags for that ? or better, how can I distinguish between those two without specifying all options?


Solution

  • Besides the version-specific directives such as NETSTANDARD2_0, the Target frameworks documentation lists the following preprocessor symbols:

    • NETFRAMEWORK

    • NETSTANDARD

    • NETCOREAPP

    ...and NETMF for .NET Micro Framework, WP for Windows Phone, and UAP for Universal Windows Platform.


    Here is an example .csproj:

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

    and C# class:

    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
            }
        }
    }
    

    Here's .NET Core 3.0 selected (see top left), with the NETCOREAPP region 'live' and the others greyed out:

    enter image description here