0

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

我已将 Web 应用程序切换到 VS2008,并以 .NET 2.0 为目标。一旦我这样做了,我就可以很好地运行 NAnt(0.85rc4、0.85 和 0.86b1)。当我尝试使用一些 VB9 语法时,它仍然可以很好地编译回 VS2008 中的 .NET 2.0 二进制文件,如果您尝试在 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"/>
4

2 回答 2

0

我想知道您是否必须更改运行 NAnt的框架。

另外,查看NAntContrib项目。那有 MSBuild 任务。我们用它来构建我们 2008 年的项目,在那里我们使用你想要的花哨的语法糖,直到 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;

        }
    }
}
于 2009-01-06T19:24:28.763 回答
0

我对 NAnt 的期望有点过分。因为我使用 NAntContrib 在项目上运行 msbuild,所以我确实想要 NAnt 的 net-3.5 框架。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"/>
于 2009-01-06T20:27:17.937 回答