代码之家  ›  专栏  ›  技术社区  ›  Doctor Jones

未定义目标框架符号

  •  0
  • Doctor Jones  · 技术社区  · 6 年前

    我试图使用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
    

    结果的输出是“无法分辨我们使用的框架”。

    我做错什么了吗?文件不正确吗?或者我发现了一个虫子?

    1 回复  |  直到 6 年前
        1
  •  1
  •   CodeCaster    6 年前

    这些指令仅由.NET核心的生成系统隐式生成。关键字 from the documentation :

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

    因此,当创建面向.NET框架的新应用程序或类库时,指令将丢失。而是创建一个核心或.NET标准库或应用程序。

    如果你还没准备好移动到核心,请看 Detect target framework version at compile time 对于解决方法-例如,您可以自己定义它们。