VBC + NAnt。编译WinForm时出错

时间:2009-01-06 16:43:42

标签: build-process nant vbc

首先应该注意的是,我试图避免重写我的所有脚本以使用msbuild。

我注意到在使用带有VBC任务的NAnt和编译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'中找不到'Sub Main'。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

我不确定你是不是想要在NAnt中使用msbuild,或者你不想转换到msbuild脚本批发。

如果是后者,那么我在同一主题的其他帖子上的回复也是有效的。

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

msbuild任务的参考是:

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

相关片段:

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

答案 2 :(得分:0)

您需要做的是在VBC命令中设置以下内容:

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

这应该可以解决您的问题。 (我猜第二个dll因为我是CS人)然而编译的语法几乎是一样的。

在我参与过的所有项目中,您总是需要设置引用以包含任何DLL,无论它们来自.Net,第三方还是您自己(即项目引用),否则它们将无法正确链接。

放手一搏,看看会发生什么。