请问C#6.0工作.NET 4.0?请问C#6.0工作.NET 4.0?(Does C# 6.0 w

2019-05-10 11:27发布

我创建了一个示例项目,用C#6.0的好东西 - 空传播和属性初始化为例,设定目标版本的.NET 4.0和它...作品。

public class Cat
{
    public int TailLength { get; set; } = 4;

    public Cat Friend { get; set; }

    public string Mew() { return "Mew!"; }
}

class Program
{
    static void Main(string[] args)
    {
        var cat = new Cat {Friend = new Cat()};
        Console.WriteLine(cat?.Friend.Mew());
        Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
        Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
    }
}
  • 维基百科说 .NET框架的C#6.0是4.6。
  • 这个问题 (和Visual Studio的2015年 CTP测试)说,CLR版本是4.0.30319.0。
  • 这MSDN页说,.NET 4.0,4.5,4.5.2使用CLR 4.没有任何信息有关.NET 4.6。

这是否意味着我可以使用C#6.0的功能为我的软件,面向.NET 4.0? 是否有任何限制或缺陷?

Answer 1:

是的(大部分)。 C#6.0需要新的罗斯林的编译器,但新的编译器可以将针对老年框架版本。 这是仅限于不需要从框架支持的新功能。

例如,当你可以使用字符串插值功能在C#6.0与早期版本的.Net(因为它会导致对呼叫string.Format ):

int i = 3;
string s = $"{i}";

你需要的.Net 4.6与使用它IFormattable ,因为只有新的框架版本增加了System.FormattableString

int i = 3;
IFormattable s = $"{i}";

你提到的情况下,不需要从框架类型的工作。 因此,编译器是完全能够支持这些功能的旧框架版本。



Answer 2:

只想把重点放在如何理解维基百科等各个环节。

当维基百科说C#6.0与.NET框架4.6,它只是意味着编译器(msc.exe)的量产版将在.NET Framework 4.6版本的一部分。 通过多目标 ,这样的编译器可以支持低版本的.NET Framework版本的。 当然,由于罗斯林成为一个开源项目,编译器现在完全是一个单独的组件。

当事情涉及的4.0.30319(.0)的CLR版本,它实际上可能是.NET Framework 4的*(4.0,4.0。*,4.5,4.5。*,4.6,4.6。*),因为它们都实现了CLR版本4规范。 且不说Xamarin /单声道也执行同样的CLR规范。

在MSDN页面尚未完全更新,但有些页面已具有的.NET Framework 4.6版本信息部分中列出。

在所有的,语言的规格(以及C#编译器),CLR规格,和.NET Framework版本不紧密耦合彼此。 它确实给开发商足够的灵活性,以利用新的编译器为目标较旧的CLR和.NET框架。



Answer 3:

是的,你可以使用较旧框架,新的编译器,并可以访问新的编译器功能(只要这些功能不要求在.NET 4.6引入了新的类型)。

这样其他例子是使用默认参数的方法与介绍了C#4.0(.NET 4.0),但你可以在使用它们.NET 2.0(C#2.0)和.NET 3.5(C#3.0)项目。

你也可以使用扩展方法(在介绍C#3.0)在.NET 2.0或.NET 3.0 ,如果你做一个小的解决办法 ,使编译器高兴,因此可以发现,被介绍在.NET中3.5的属性。



Answer 4:

如果你正在使用的建筑ascripts记得更改为新的构建器的路径:

集CPATH = C:\程序文件(x86)\的MSBuild \ 14.0 \宾

[Rebuild.bat]

set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
call nuget_restore.bat
"%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal

if %errorlevel% neq 0 goto ERROR

REM call deploy Release  //Things like deploy files..
goto END

:ERROR
       echo ERROR: %errorlevel%
       pause

:END


Answer 5:

通过@oobe其实答案importatnt。 \程序文件(x86)\的MSBuild \ 14.0 \斌:只能使用MSBuild.exeC后,我可以建立通过批处理文件我的解决方案。



文章来源: Does C# 6.0 work for .NET 4.0?
标签: c# .net c#-6.0