Domanda

Come faccio a dire a NAnt di usare lo stesso compilatore VB utilizzato da VS2008 quando crea applicazioni di targeting .NET 2.0?

Ho cambiato un'applicazione web su VS2008 con targeting per back-up a .NET 2.0. Posso eseguire NAnt (0.85rc4, 0.85 e 0.86b1) bene una volta che faccio questo. Quando provo ad usare parte della sintassi VB9, che si compila ancora fino a un binario .NET 2.0 in VS2008, NAnt ottiene il tipo di errore di compilazione che si otterrebbe se si provasse a fare la nuova sintassi in VS2005 (dove non era supportato).

Nel caso in cui aiuti, ecco una versione semplificata di ciò che sto tentando, solo un semplice delegato anonimo che funziona benissimo fino a quando non provo a usare NAnt per creare l'app 2.0 anziché 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

MODIFICA: A meno che qualcuno non riesca a pensare a un motivo per non farlo, l'impostazione corrente nel mio file di build è questa (dal momento che in effetti voglio un'applicazione .NET 2.0, solo una generata da un più robusto Compilatore VB):

<property name="nant.settings.currentframework" value="net-2.0"/>
È stato utile?

Soluzione 2

Ero un po 'troppo letterale nelle mie aspettative di NAnt. Dato che stavo usando NAntContrib per eseguire msbuild sui progetti, volevo il framework net-3.5 per NAnt. MSBuild e il file di progetto si occupano del back-targeting del progetto su .NET 2.0. Sono stato in grado di prendere il mio delegato anonimo VB, compilarlo su 3.5 e rilasciare la DLL generata direttamente su una macchina con solo .NET 2.0 e funzionava bene.

Basta impostare il progetto per la compilazione in .NET 2.0: Proprietà del progetto - > Compila [tab] - > Opzioni di compilazione avanzate ... - > Framework di destinazione (tutte le configurazioni): .NET Framework 2.0

... e dì a NAnt di assumere ciecamente net-3.5:

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

Altri suggerimenti

Mi chiedo se devi cambiare il framework che NAnt è in esecuzione sotto.

Inoltre, guarda nel progetto NAntContrib . Questo ha il compito MSBuild. Usiamo questo per costruire i nostri progetti del 2008, in cui utilizziamo lo zucchero di sytax di fantasia come quello che vuoi, fino agli assiemi 2.0. Una cosa che dovevamo fare era sostituire MSBuild.exe in C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 con uno che inoltra la richiesta al 3.0 MSBuild.exe

Ecco il codice che usiamo per sostituire MSBuild.exe nel percorso 2.0. Non ricordo dove ho trovato questo codice. Ho provato a trovarlo online ma non ci riesco.

Crea questo in MSBuild.exe e sostituisci il tuo 2.0 con questo.

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;

        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top