2008-09-28 7 views
13

¿Cómo se especifica una versión de marco de destino para el compilador csc.exe C# mediante la invocación de línea de comandos (por ejemplo, ningún archivo .csproj y que no pasa por el motor MSBUILD)?segmentando la versión específica de frawework en csc.exe

por ejemplo, utilizando el compilador csc.exe C# 3.0, ¿cómo se compila para IL dirigidos al framework 2.0 .net?

Respuesta

4

En el caso específico del compilador C# 3, no hay ningún problema siempre que no utilice ensamblados o tipos que no estén en .NET 2.0: el IL es el mismo (en oposición a targeting 1.1, por ejemplo).

Además de esto, puede usar/noconfig/nostdlib y luego hacer referencia explícita a los ensamblados de .NET 2.0 (en c: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 por ejemplo). Parece que la opción de línea de comandos/lib puede hacer esto un poco más fácil al permitirle especificar un directorio para buscar referencias, pero yo mismo no lo he intentado.

+0

Esto parece funcionar (haciendo referencia explícita a las 2.0 libs), pero la primera sugerencia de simplemente confiar en el hecho de que la IL es la misma) parecería dejarme 'expuesto' (por ejemplo, no hay tiempo de alerta de que se había desviado de los ensambles de solo 2.0). – sbohlen

+0

Sí, lo dejaría expuesto a eso. Tenga cuidado con las diferencias entre .NET 2.0 y 2.0SP1 también (por ejemplo, DateTimeOffset): no sé si podrá encontrar fácilmente los ensamblados "vanilla" 2.0 como referencia. Por supuesto, podrías copiarlos desde una máquina que no sea SP1 ... –

+0

Sí, creo que, por lo que puedo ver, esto es algo en lo que tendré que investigar: cómo se 'impone' cuando se dispara MSBUILD frente al archivo .csproj (donde es posible, por supuesto, especificar la versión FW objetivo). Parece que no hay disponible una opción csc.exe a prueba de balas. – sbohlen

Cuestiones relacionadas