visual - Cómo compilar C#con una versión específica del idioma
visual studio code c++ compilar (1)
Digamos que quiero mostrarle a alguien las diferencias entre foreach en C # 4.0 y 5.0.
Así que escribo mi fragmento de código:
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();
}
}
Pero no importa cómo lo compile, siempre funciona como lo hace en 5.0 * . He intentado configurar la versión de idioma en el archivo csproj (Compilación -> Avanzada -> Versión de idioma) y he intentado compilarlo en la línea de comandos:
csc myProgram.cs /langversion:4
No puedo hacerlo funcionar de la manera "antigua". ¿Alguna ayuda? Puntos de bonificación si me puede decir cómo hacerlo en la línea de comandos y en Visual Studio.
* Para quien no sepa, en C #. <= 4.0 esto imprimiría Cantelope Cantelope Cantelope
, mientras que en C # 5.0+ imprimiría (más intuitivamente) Apple Banana Cantelope
. Aquí hay un enlace , y aquí hay otro .
El propósito de /langversion
es solo hacer que el compilador acepte construcciones de lenguaje específicas. No afecta el comportamiento real del compilador.
La documentation establece que:
Hace que el compilador acepte solo la sintaxis que se incluye en la especificación del lenguaje C # elegido.
y
Debido a que cada versión del compilador de C # contiene extensiones a la especificación del lenguaje, / langversion no le brinda la funcionalidad equivalente de una versión anterior del compilador.
Entonces, para demostrar el comportamiento diferente, tendrá que usar un csc.exe diferente, instalado con las versiones de marco adecuadas.
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