我正在尝试使用if编译器指令有条件地包括一些.Net Framework早期版本所需的代码,但不包括更高版本。
我使用了来自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
结果输出为“无法告诉我们正在使用哪个框架”。
我做错什么了吗?文档不正确吗?还是我发现了一个错误?
答案 0 :(得分:2)
这些指令仅由.NET Core的生成系统隐式生成。关键字from the documentation:
.NET Core目标框架的预处理器符号的完整列表是:
因此,当您创建针对.NET Framework的新应用程序或类库时,这些指令将丢失。而是创建一个Core或.NET Standard库或应用程序。
如果您还没有准备好使用Core,请参见Detect target framework version at compile time了解解决方法-例如,您可以自己定义它们。