我创建了一个示例项目,用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? 是否有任何限制或缺陷?
是的(大部分)。 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}";
你提到的情况下,不需要从框架类型的工作。 因此,编译器是完全能够支持这些功能的旧框架版本。
只想把重点放在如何理解维基百科等各个环节。
当维基百科说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框架。
是的,你可以使用较旧框架,新的编译器,并可以访问新的编译器功能(只要这些功能不要求在.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的属性。
如果你正在使用的建筑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
通过@oobe其实答案importatnt。 \程序文件(x86)\的MSBuild \ 14.0 \斌:只能使用MSBuild.exe由C后,我可以建立通过批处理文件我的解决方案。