你知道C#现在是7.1,有很多新的语法和功能(称为“语法Sugers”)。
但是,在VS2013,VS2012或VS2010等先前版本中,这些版本不能满足。如果您复制源代码并将它们放在那里,显然必定会有很多错误,因为那里的编译器无法识别它们。不同的VS可能有不同类型的编译器。
如果我们想让我们的代码与不同类型的VS中的不同编译器“兼容”,为什么我们不能为我们切换多个编译器(例如:如果我想写一个适合VS2010的代码。我首先将我的编译器切换到VS2010并编写)。那会更好吗?
答案 0 :(得分:1)
使用具有较低网络框架和编译器的高级语法 在最新的VS中,它可以成功编译,为什么?
Matt Warren's blog entry是关于此问题的精彩读物,Eric Lippert's也是如此。
一路上常见的技术是编译器 从高级语言功能到低级语言的“低级” 功能相同的语言。
简而言之,'较新'的功能会转换为''lowered
')到'较旧'的功能 - 因此它们会继续在框架上运行(即使它没有新功能的概念)。< / p>
using
的Roslyn源代码是降低的示例(将using
转换为try finally
的位置):
/// <summary>
/// Rewrite a using statement into a try finally statement. Two forms are possible:
/// 1) using (expr) stmt
/// 2) using (C c = expr) stmt
///
/// The former is handled by RewriteExpressionUsingStatement and the latter is handled by
/// RewriteDeclarationUsingStatement (called in a loop, once for each local declared).
/// </summary>
如果我们想制作,为什么我们没有多个编译器可供我们切换 我们的代码与不同类型的中的不同编译器“兼容” VS(例如:如果我想写一个适合VS2010的代码,我 首先将我的编译器切换到VS2010的编译器并写入)。这会 会更好吗?
只要您使用的是VS 2013或更高版本,就可以轻松完成此操作。从VS 2013开始,C#编译器可用standalone。
此外,由于Visual Studio允许您specify the compiler version,因此通常不需要这样做。