0

我如何告訴惡性使用相同的VB編譯VS2008使用時,它創建.NET 2.0靶嚮應用程序?如何讓NAnt爲.NET 2.0應用程序使用新的VB9編譯器?

我已切換的Web應用程序VS2008背針對性到.NET 2.0。一旦我這樣做,我就可以運行NAnt(0.85rc4,0.85和0.86b1)。當我嘗試使用一些VB9語法,仍然編譯就好回VS2008中的一個.NET 2.0二進制,惡性變的那種編譯錯誤的,如果你嘗試做新的語法在VS2005,你會得到(它WASN不支持)。

萬一有幫助,這裏是我在嘗試的簡化版本,只是一個簡單的匿名委託,直到我嘗試使用楠打造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"/> 

回答

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的

.. 。而告訴楠盲目假設淨3.5:

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

應該注意的是,當使用NAnt版本> .85時,該屬性只能設置爲net-3.5。 – 2009-01-06 23:38:26

0

我在想你是否需要運行NAnt的change the framework

此外,尋找到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; 

     } 
    } 
} 
+0

我可以得到它通過改變它的工作,以「網3.5」,而使用惡性0.86-β1但是這不是我的目標(還)。我需要在這個項目中採取寶貝步驟,否則如果出現問題,我的同事可能會殺了我。 – patridge 2009-01-06 19:31:03

相關問題