0

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

我注意到在将 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>

错误:[vbc] vbc:错误 BC30420:在“WindowAppNantTest.My.MyApplication”中找不到“Sub Main”。

4

3 回答 3

1

看起来问题来自mainrootnamespace属性。当您将它们切换为以下内容时会发生什么:

<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>
于 2009-01-06T17:19:32.103 回答
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>
于 2011-01-27T23:13:38.907 回答
0

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

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

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

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

试一试,看看会发生什么。

于 2009-02-12T22:15:22.857 回答