我已阅读Microsoft's article有关如何检测目标框架的信息,例如:
netcoreapp2.2
net47
net58
但是在某些情况下,我并不关心 exact 版本,而是一般的框架目标:
NETCORE
.Net Framework
但是我没有找到这样的标志。
问题:
有没有通用的标记?或更妙的是,如何在不指定所有选项的情况下区分这两个?
答案 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
区域为“活动”区域,其他区域为灰色:
[使用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} }。