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

问题描述 投票:0回答:2

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

我已将 Web 应用程序切换到 VS2008,目标是 .NET 2.0。执行此操作后,我可以很好地运行 NAnt(0.85rc4、0.85 和 0.86b1)。当我尝不支持)。

如果它有帮助,这里是我正在尝试的简化版本,只是一个简单的匿名委托,在我尝试使用 NAnt 而不是 VS2008 构建 2.0 应用程序之前它工作得很好。

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 .net-2.0 nant
2个回答
0
投票

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

另外,请查看 NAntContrib 项目。那有 MSBuild 任务。我们用它来构建 2008 年的项目,其中我们使用像您想要的那样的花哨的语法糖,低至 2.0 程序集。我们必须做的一件事是将 C:\WINDOWS\Microsoft.NET\Framework 2.0.50727 中的 MSBuild.exe 替换为将请求转发到 3.0 MSBuild.exe 的 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; } } }
    

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"/>
    
© www.soinside.com 2019 - 2024. All rights reserved.