Question

Comment puis-je dire à NAnt d'utiliser le même compilateur VB que VS2008 utilise lorsqu'il crée des applications de ciblage .NET 2.0?

J'ai basculé une application Web sur VS2008 en arrière-cible vers .NET 2.0. Je peux courir NAnt (0.85rc4, 0.85 et 0.86b1) très bien une fois que je fais cela. Lorsque j'essaie d'utiliser une partie de la syntaxe VB9 qui compile toujours parfaitement en binaire .NET 2.0 dans VS2008, NAnt obtient le type d'erreur de compilation que vous obtiendriez si vous essayiez de créer la nouvelle syntaxe dans VS2005 (où pas pris en charge).

Au cas où cela vous aiderait, voici une version simplifiée de ce que je tente, un simple délégué anonyme qui fonctionne parfaitement jusqu'à ce que j'essaie d'utiliser NAnt pour créer l'application 2.0 au lieu 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

MODIFIER: À moins que quelqu'un ne trouve une raison de ne pas le faire, le paramètre actuel de mon fichier de construction est le suivant (car je souhaite en effet une application .NET 2.0, une seule générée par un Compilateur VB):

<property name="nant.settings.currentframework" value="net-2.0"/>
Était-ce utile?

La solution 2

J'étais un peu littéral dans mes attentes envers NAnt. Depuis que j'utilisais NAntContrib pour exécuter msbuild sur les projets, je voulais le framework Net-3.5 pour NAnt. MSBuild et le fichier de projet se chargent du ciblage en arrière du projet sur .NET 2.0. J'ai pu prendre mon délégué anonyme VB, le compiler en 3.5 et déposer la DLL générée directement sur une machine ne disposant que de .NET 2.0, et tout s'est bien déroulé.

Configurez simplement le projet pour qu'il soit compilé en .NET 2.0: Propriétés du projet - > Compiler [onglet] - > Options de compilation avancées ... - > Cadre cible (toutes les configurations): .NET Framework 2.0

... et dites à NAnt d'assumer aveuglément net-3.5:

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

Autres conseils

Je me demande si vous devez modifier le cadre que NAnt est en cours d'exécution. sous.

Consultez également le projet NAntContrib . Cela a la tâche MSBuild. Nous l'utilisons pour construire nos projets de 2008, où nous utilisons le sucre de sytax élégant comme vous le souhaitez, jusqu'à 2,0 assemblages. Une chose à faire était de remplacer le fichier MSBuild.exe dans le dossier C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 par un autre qui transfère la demande au fichier 3.0 MSBuild.exe

Voici le code que nous utilisons pour remplacer MSBuild.exe dans le chemin d'accès 2.0. Je ne me souviens plus d'où j'ai obtenu ce code. J'ai essayé de le trouver en ligne mais je ne peux pas.

Générez ceci avec MSBuild.exe et remplacez votre version 2.0 par celle-ci.

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;

        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top