如何让NAnt将新的VB9编译器用于.NET 2.0应用程序?

时间:2009-01-06 19:17:24

标签: vb.net visual-studio-2008 compiler-construction .net-2.0 nant

如何告诉NAnt使用VS2008在创建面向.NET 2.0的应用程序时使用的相同VB编译器?

我已将Web应用程序切换到VS2008,后向目标为.NET 2.0。一旦我这样做,我就可以运行NAnt(0.85rc4,0.85和0.86b1)。当我尝试使用一些VB9语法,它仍然可以很好地编译回VS2008中的.NET 2.0二进制文件时,如果你试图在VS2005中执行新语法,那么NAnt会遇到编译错误。不支持。

如果它有帮助,这里是我正在尝试的简化版本,只是一个简单的匿名委托,在我尝试使用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 :(得分:0)

我想知道你是否必须change the framework NAnt正在运行。

另外,请查看NAntContrib项目。那有MSBuild任务。我们用这个来构建我们的2008项目,我们使用你想要的花式sytax糖,下降到2.0组件。我们必须要做的一件事是将C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727中的MSBuild.exe替换为将请求转发到3.0 MSBuild.exe

以下是我们用于替换2.0路径中的MSBuild.exe的代码。我不记得我在哪里得到这段代码。我试图在网上找到它,但不能。

将其构建到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;

        }
    }
}

答案 1 :(得分:0)

在我对NAnt的期望中,我对文字有点了解。由于我使用NAntContrib在项目上运行msbuild,我确实想要NAnt的net-3.5框架。 MSBuild和项目文件负责将项目反向定位到.NET 2.0。我能够获取我的VB匿名委托,将其编译为3.5并将生成的DLL直接放到只有.NET 2.0的机器上,并且运行正常。

只需将项目设置为编译为.NET 2.0:项目属性 - &gt;编译[tab] - &gt;高级编译选项... - &gt;目标框架(所有配置):.NET Framework 2.0

...告诉NAnt盲目假设net-3.5:

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