目标框架符号没有定义

问题描述 投票:1回答:1

我试图用一个if编译器指令有条件地包括所需的早期版本的.NET框架的一些代码,而不是更高版本。

我用从MSDN的#if compiler directive参考,并Target Frameworks参考以下引用。

我创作一个.net应用程序4.5.1,但NET451符号似乎没有被定义,也不做任何其他人。

我从目标框架MSDN文章改编的例子包括所有框架符号,这样我就可以看到哪一个定义。

#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

输出的结果是“无法告诉我们正在使用的框架”。

难道我做错了什么?是文档不正确的?还是我发现了一个bug?

c# preprocessor-directive
1个回答
3
投票

这些指令只含蓄地对.NET核心构建系统生成的。关键字from the documentation

预处理符号for .NET的核心目标框架的完整列表是:

所以,当你创建一个新的应用程序或类库针对.NET框架,该指令将丢失。相反,创建一个核心或.NET标准库或应用程序。

如果你还没有准备好迁移到睿,看到Detect target framework version at compile time的解决方法 - 你可以自己定义它们,例如。

© www.soinside.com 2019 - 2024. All rights reserved.