Pregunta

¿Cómo le digo a NAnt que use el mismo compilador de VB que utiliza el VS2008 cuando crea aplicaciones de orientación .NET 2.0?

He cambiado una aplicación web a VS2008 con destino posterior a .NET 2.0. Puedo ejecutar NAnt (0.85rc4, 0.85 y 0.86b1) bien una vez que haga esto. Cuando trato de usar algo de la sintaxis VB9, que aún compila de nuevo en un binario .NET 2.0 en VS2008, NAnt obtiene el tipo de error de compilación que obtendría si intentara hacer la nueva sintaxis en VS2005 (donde no estaba No es compatible).

En caso de que ayude, aquí hay una versión simplificada de lo que estoy intentando, solo un simple delegado anónimo que funciona muy bien hasta que trato de usar NAnt para compilar la aplicación 2.0 en lugar de VS2008.

Public Class SomeObject
    Public Name As String
End Class
Private SomeList As List(Of SomeObject) = SomeObject.GetAllSomeObjects()
Public Function FindFirstItemWithSimilarName(ByVal x As String) As SomeObject
    Return SomeList.Find(Function(p As SomeObject) p.Name.Contains(x))
End Function

EDITAR: A menos que alguien pueda pensar en una razón para no hacerlo, la configuración actual en mi archivo de compilación es la siguiente (ya que realmente quiero una aplicación .NET 2.0, solo una generada por una más robusta Compilador VB):

<property name="nant.settings.currentframework" value="net-2.0"/>
¿Fue útil?

Solución 2

Estaba siendo un poco literal para mis expectativas de NAnt. Como estaba usando NAntContrib para ejecutar msbuild en los proyectos, quería el framework net-3.5 para NAnt. MSBuild y el archivo de proyecto se encargan de la orientación del proyecto a .NET 2.0. Pude tomar mi delegado anónimo de VB, compilarlo a 3.5 y colocar la DLL generada directamente en una máquina con solo .NET 2.0 y funcionó bien.

Simplemente configure el proyecto para compilar en .NET 2.0: Propiedades del proyecto - > Compilar [pestaña] - > Opciones avanzadas de compilación ... - > Marco de destino (todas las configuraciones): .NET Framework 2.0

... y dile a NAnt que asuma ciegamente net-3.5:

<property name="nant.settings.currentframework" value="net-3.5"/>

Otros consejos

Me pregunto si tiene que el marco de trabajo que NAnt está ejecutando bajo.

También, busque en el proyecto NAntContrib . Eso tiene la tarea MSBuild. Usamos esto para construir nuestros proyectos de 2008, donde usamos el azúcar de sintaxis de lujo como lo que quiere, hasta los ensamblajes 2.0. Una cosa que tuvimos que hacer fue reemplazar el MSBuild.exe en C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 con uno que reenvía la solicitud al MSBuild.exe 3.0

Aquí está el código que usamos para reemplazar MSBuild.exe en la ruta 2.0. No recuerdo dónde obtuve este código. Intenté encontrarlo en línea pero no puedo.

Genere esto en MSBuild.exe y reemplace su 2.0 por este.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;

namespace MSBuild
{
    public class Program
    {
        public static int Main(string[] args)
        {
            for (int argIndex = 0; argIndex < args.Length; argIndex++)
            {
                if (args[argIndex].Contains(" "))
                {
                    string quotedArg = string.Format("\"{0}\"", args[argIndex]);
                    args[argIndex] = quotedArg;
                }
            }

            string arguments = string.Join(" ", args);

            // HACK: I should probably change
            //       this to automaticlaly 
            //       determine the path

            Process process = Process.Start("C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe",arguments);

            process.WaitForExit();

            return process.ExitCode;

        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top