【问题标题】:How do I get NAnt to use the new VB9 compiler for .NET 2.0 applications?如何让 NAnt 将新的 VB9 编译器用于 .NET 2.0 应用程序?
【发布时间】:2009-01-06 19:17:23
【问题描述】:

我如何告诉 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"/>

【问题讨论】:

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


    【解决方案1】:

    我想知道您是否必须 change the framework 运行 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;
    
            }
        }
    }
    

    【讨论】:

    • 我可以通过在使用 NAnt 0.86-beta1 时将其更改为“net-3.5”来使其工作,但这还不是我的目标。我需要在这个项目上采取一些小步骤,否则如果出现问题,我的同事可能会杀了我。
    【解决方案2】:

    我对 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"/>
    

    【讨论】:

    • 需要注意的是,使用NAnt版本> .85时,该属性只能设置为net-3.5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多