Как заставить NAnt использовать новый компилятор VB9 для приложений .NET 2.0?

Как мне сказать NAnt использовать тот же компилятор VB, который VS2008 использует при создании приложений для .NET 2.0?

Я переключил веб-приложение на VS2008 с обратным таргетингом на .NET 2.0. Я могу нормально запустить NAnt (0.85rc4, 0.85 и 0.86b1), как только сделаю это. Когда я пытаюсь использовать какой-то синтаксис VB9, который по-прежнему отлично компилируется обратно в двоичный файл .NET 2.0 в VS2008, NAnt получает ошибку компиляции, которую вы получили бы, если бы попытались выполнить новый синтаксис в VS2005 (где это не было не поддерживается).

В случае, если это поможет, вот упрощенная версия того, что я пытаюсь сделать, простой анонимный делегат, который отлично работает, пока я не попытаюсь использовать NAnt для создания приложения 2.0 вместо 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

РЕДАКТИРОВАТЬ: Если кто-то не может придумать причину не делать этого, текущая настройка в моем файле сборки такова (поскольку мне действительно нужно приложение .NET 2.0, только одно, созданное более надежным компилятором VB) :

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

person patridge    schedule 06.01.2009    source источник


Ответы (2)


Интересно, нужно ли вам изменить структуру, в которой работает NAnt.

Также ознакомьтесь с проектом NAntContrib. Это задача MSBuild. Мы используем это для создания наших проектов 2008 года, где мы используем причудливый сахар Sytax как то, что вы хотите, вплоть до сборок 2.0. Одна вещь, которую нам нужно было сделать, это заменить MSBuild.exe в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 на тот, который перенаправляет запрос на 3.0 MSBuild.exe.

Вот код, который мы используем для замены MSBuild.exe в пути 2.0. Не могу вспомнить, откуда у меня этот код. Я пытался найти это в Интернете, но не могу.

Соберите это в MSBuild.exe и замените свой 2.0 на этот.

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;

        }
    }
}
person Community    schedule 06.01.2009
comment
Я могу заставить его работать, изменив его на net-3.5 при использовании NAnt 0.86-beta1, но это не моя цель (пока). Мне нужно делать маленькие шаги в этом проекте, иначе мои коллеги, вероятно, убьют меня, если что-то пойдет не так. - person patridge; 06.01.2009

Я был слишком буквально в своих ожиданиях от NAnt. Поскольку я использовал NAntContrib для запуска msbuild в проектах, мне нужна была структура net-3.5 для NAnt. MSBuild и файл проекта обеспечивают обратную ориентацию проекта на .NET 2.0. Я смог взять своего анонимного делегата VB, скомпилировать его до версии 3.5 и перетащить сгенерированную DLL прямо на машину с только .NET 2.0, и она работала нормально.

Просто установите проект для компиляции в .NET 2.0: Свойства проекта -> Компиляция [вкладка] -> Расширенные параметры компиляции ... -> Целевая платформа (все конфигурации): .NET Framework 2.0

... и скажите NAnt слепо принять net-3.5:

<property name="nant.settings.currentframework" value="net-3.5"/>
person patridge    schedule 06.01.2009
comment
Следует отметить, что это свойство может быть установлено в net-3.5 только при использовании NAnt версии ›.85. - person Scott Saad; 07.01.2009