【问题标题】:Why Does .NET 4.6 Specific Code Compile When Targeting Older Versions of the Framework? [duplicate]为什么在针对较旧版本的框架时编译 .NET 4.6 特定代码? [复制]
【发布时间】:2015-10-12 18:32:23
【问题描述】:

我有一个针对旧版本 .NET 框架 (.NET 4.5.2) 的项目。我安装了 Visual Studio 2015(因此在我的机器上安装了 .NET 4.6)。我注意到,如果我使用 .NET 4.6/C# 6 中发布的 C# 语言功能,它仍然可以编译。如果我的项目的目标框架是<.net>

    public string MyExpressionBodyProperty => "1";

    //auto properties are new in C# 6
    public string MyAutoProperty { get; } = "1";

    private static void MethodThatUsesNameOf(string filename)
    {
        if (filename == null) 
        {
            //nameof was released in C# 6
            throw new ArgumentException("The file does not exist.", nameof(filename));
        }
    }

如何确保我只使用适用于我所针对的框架版本的 .NET 语言功能?

【问题讨论】:

    标签: c# .net visual-studio-2015 c#-6.0 .net-4.6


    【解决方案1】:

    有 C# 6 功能和 .NET 4.6 功能。

    nameof 是 C# 6 功能,因此只需在较新的编译器上运行,但仍可使用较旧的 .NET 框架。

    需要 .NET 4.6 的功能示例如下:

    public void Foo(IReadOnlyCollection<string> input)
    {
    }
    
    public void Main(string[] args)
    {
        Foo(new Stack<string>());
    }
    

    在 .NET 4.6 中,Stack 实现了 IReadOnlyCollection,但在以前的版本中没有。如果您选择 .NET 4.5.2 作为目标平台,上述代码将无法编译。

    【讨论】:

    • 我能否将此代码部署到没有 .NET 4.6 的机器上?我没有遵循您的最后一句话“在谈论 .NET 框架功能时,通常会涉及到类。”
    • 是的,你会的。只要部署机器的框架与您在 VS2015 中的目标兼容。
    • @whatevAR:我将我的评论扩展到了一个特定的功能示例。 Here is a list of changes 特定于新版 .NET 框架的更多示例。如果它不在该页面上,则无需担心使用它。此外,可以信任编译器来确定是否可以使用某个功能。
    • 虽然有些语言特性又得到框架特性的支持。例如,您不能在没有IAsyncStateMachine 的情况下使用async/await
    【解决方案2】:

    .NET Framework 版本和 C# 语言版本是不同的东西。 C# 6 语言特性

    public string MyAutoProperty { get; } = "1";
    nameof(filename)
    

    可由 VS 2015 编译成针对早期框架的代码。

    如何确保我只使用适用于我所针对的框架版本的 .NET 语言功能?

    如果您尝试使用 .NET 4.6 Framework 功能,如果您针对的是较早的框架,则会收到相应的编译器错误。

    我能否将此代码部署到没有 .NET 4.6 的机器上?

    是的,你会的。只要部署机器的框架与您在 VS2015 中的目标兼容。

    【讨论】:

    • 另一种选择是在项目属性 - 构建 - 高级下更改为 C# 版本 5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2012-10-05
    相关资源
    最近更新 更多