是否有任何正式的目标框架指令?

时间:2019-06-09 17:04:23

标签: .net visual-studio .net-core .net-standard compiler-directives

我已阅读Microsoft's article有关如何检测目标框架的信息,例如:

netcoreapp2.2
net47
net58 

但是在某些情况下,我并不关心 exact 版本,而是一般的框架目标:

NETCORE
.Net Framework

但是我没有找到这样的标志。

问题:

有没有通用的标记?或更妙的是,如何在不指定所有选项的情况下区分这两个?

1 个答案:

答案 0 :(得分:5)

除了您不感兴趣的特定于版本的指令之外,Target frameworks documentation还列出了以下预处理器符号:

  • 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区域为“活动”区域,其他区域为灰色:

enter image description here

[使用Visual Studio 2019(v16.2.0预览版3)]


文章还说:

  

构建系统知道代表   支持的目标框架版本中显示的目标框架   表。使用表示.NET Standard或.NET的符号时   核心TFM,用下划线替换点并更改小写   大写字母(例如,netstandard1.4的符号是   NETSTANDARD1_4

...并且在表中我们还可以找到.NET Micro Framework(NETMF),Windows Phone(WP)和Universal Windows Platform({{1} }。