首先应该注意的是,我试图避免重写我的所有脚本以使用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'。
答案 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,第三方还是您自己(即项目引用),否则它们将无法正确链接。
放手一搏,看看会发生什么。