2009-01-06 70 views
0

首先應該注意的是,我試圖避免重寫所有腳本來使用msbuild。VBC + NAnt。編譯WinForm時出錯

我注意到在使用NAnt和VBC任務並編譯WinForms應用程序時有幾個問題。主要問題似乎是VBC找不到Sub Main。這很奇怪,因爲在VS中,沒有任何跡象表明我的vbc調用和msbuild的vbc調用之間有任何區別。

有沒有人有任何解決這個問題的方法或強制創建可能會/可能不會由MSBuild/VS生成的其餘部分類的方法?

樣本構建腳本:

<?xml version="1.0" encoding="utf-8" ?> 
<project xmlns="http://nant.sf.net/release/0.85/nant.xsd" name="Test" default="build"> 
    <target name="build"> 
     <vbc target="winexe" output="C:\Test.exe" main="WindowAppNantTest.My.MyApplication" verbose="true" rootnamespace="WindowAppNantTest"> 
      <imports> 
       <import namespace="Microsoft.VisualBasic"/> 
       <import namespace="System.Windows.Forms"/> 
      </imports> 
      <sources> 
       <include name="**/**/*.vb"/> 
      </sources> 
     </vbc> 
    </target> 
</project> 

錯誤(S): [VBC] VBC:錯誤BC30420: '子主' 在 'WindowAppNantTest.My.MyApplication' 沒有被發現。

回答

1

看起來問題來自主要rootnamespace屬性。什麼,當你切換他們恰好是類似以下內容:

<vbc target="winexe" output="C:\Test.exe" main="MyApplication" verbose="true" rootnamespace="WindowAppNantTest.My"> 
    <imports> 
     <import namespace="Microsoft.VisualBasic"/> 
     <import namespace="System.Windows.Forms"/> 
    </imports> 
    <sources> 
     <include name="**/**/*.vb"/> 
    </sources> 
</vbc> 

或類似下面的內容:

<vbc target="winexe" output="C:\Test.exe" main="My.MyApplication" verbose="true" rootnamespace="WindowAppNantTest"> 
    <imports> 
     <import namespace="Microsoft.VisualBasic"/> 
     <import namespace="System.Windows.Forms"/> 
    </imports> 
    <sources> 
     <include name="**/**/*.vb"/> 
    </sources> 
</vbc> 
+0

同樣的錯誤。我相信VS正在用My命名空間來做幕後魔術。但我沒有證據證明它正在發生。另外,如果它正在發生,那麼應該有一個我可以訪問的命令行工具來生成它們,以便VBC可以運行。 – MagicKat 2009-01-06 17:24:10

0

你需要做的是設置以下到您的VBC命令:

<references> 
    <include name="System.Windows.Forms.dll"/> 
    <indlude name="Microsoft.VisualBasic.dll"/> 
</references> 

這應該解決您的問題。 (我猜對了第二個DLL,因爲我是一個CS人員),但是編譯的語法幾乎相同。

在我工作的所有項目中,您總是需要設置引用來包含任何DLL,無論它們來自.Net,第三方還是您自己的(即Project引用),否則它們都不會正確鏈接。

給一個去看看會發生什麼。

1

我不確定你是否意味着你不想在NAnt內使用msbuild,或者如果你不想切換到msbuild腳本批發。

如果是後者,那麼我在同一主題的其他帖子上的回覆在這裏也是有效的。

您可以在NAnt腳本中使用NAnt contrib(http://nantcontrib.sourceforge.net/)並使用msbuild。

的MSBuild任務的引用:

http://nantcontrib.sourceforge.net/release/latest/help/tasks/msbuild.html

以及在相關代碼段:

<target name="build" depends="clean"> 
    <msbuild project="ProjectName.vbproj" /> 
</target>