Как заставить NAnt использовать новый компилятор VB9 для приложений .NET 2.0? - PullRequest
0 голосов
/ 06 января 2009

Как я могу сказать 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"/>

Ответы [ 2 ]

0 голосов
/ 06 января 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"/>
0 голосов
/ 06 января 2009

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

Также загляните в проект NAntContrib . Это имеет задачу MSBuild. Мы используем это для создания наших проектов 2008 года, где мы используем причудливый синтаксический сахар, такой как вы хотите, вплоть до 2.0 сборок. Однако нам нужно было заменить MSBuild.exe в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 на MSBuild.exe, который перенаправляет запрос в 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;

        }
    }
}
...