如何编译特定语言版本的C#
How to Compile C# with Specific Language Version
假设我想向某人演示 C# 4.0 和 5.0 中 foreach 之间的区别。
所以我写下了我的代码片段:
public static void Main()
{
string[] fruits = { "Apple", "Banana", "Cantelope" };
var actions = new List<Action>();
foreach (var fruit in fruits)
{
actions.Add(() => Console.WriteLine(fruit));
}
foreach(var a in actions)
{
a();
}
}
但是无论我怎么编译,它总是像在5.0*中那样工作。我试过在 csproj 文件中设置语言版本(Build -> Advanced -> Language Version),我试过在命令行上构建它:
csc myProgram.cs /langversion:4
我无法让它以 "old" 的方式工作。有什么帮助吗?如果您能告诉我如何在命令行和 Visual Studio.
上执行此操作,则加分
* 对于不了解 C# 的人。 <= 4.0 这将打印 Cantelope Cantelope Cantelope
,而在 C# 5.0+ 中它将(更直观地)打印 Apple Banana Cantelope
。 Here's a link, and here's another.
/langversion
的目的只是让编译器接受特定的语言结构。它不会影响编译器的实际行为。
documentation 指出:
Causes the compiler to accept only syntax that is included in the chosen C# language specification.
和
Because each version of the C# compiler contains extensions to the language specification, /langversion does not give you the equivalent functionality of an earlier version of the compiler.
因此,为了演示不同的行为,您必须使用不同的 csc.exe,并安装正确的框架版本。
C:\Windows\Microsoft.NET\Framework\v3.5>csc /out:c:\temp\foo-35.exe c:\temp\foo.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.7903
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Windows\Microsoft.NET\Framework\v3.5>c:\temp\foo-35.exe
Cantelope
Cantelope
Cantelope
假设我想向某人演示 C# 4.0 和 5.0 中 foreach 之间的区别。
所以我写下了我的代码片段:
public static void Main()
{
string[] fruits = { "Apple", "Banana", "Cantelope" };
var actions = new List<Action>();
foreach (var fruit in fruits)
{
actions.Add(() => Console.WriteLine(fruit));
}
foreach(var a in actions)
{
a();
}
}
但是无论我怎么编译,它总是像在5.0*中那样工作。我试过在 csproj 文件中设置语言版本(Build -> Advanced -> Language Version),我试过在命令行上构建它:
csc myProgram.cs /langversion:4
我无法让它以 "old" 的方式工作。有什么帮助吗?如果您能告诉我如何在命令行和 Visual Studio.
上执行此操作,则加分* 对于不了解 C# 的人。 <= 4.0 这将打印 Cantelope Cantelope Cantelope
,而在 C# 5.0+ 中它将(更直观地)打印 Apple Banana Cantelope
。 Here's a link, and here's another.
/langversion
的目的只是让编译器接受特定的语言结构。它不会影响编译器的实际行为。
documentation 指出:
Causes the compiler to accept only syntax that is included in the chosen C# language specification.
和
Because each version of the C# compiler contains extensions to the language specification, /langversion does not give you the equivalent functionality of an earlier version of the compiler.
因此,为了演示不同的行为,您必须使用不同的 csc.exe,并安装正确的框架版本。
C:\Windows\Microsoft.NET\Framework\v3.5>csc /out:c:\temp\foo-35.exe c:\temp\foo.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.7903
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Windows\Microsoft.NET\Framework\v3.5>c:\temp\foo-35.exe
Cantelope
Cantelope
Cantelope