0

对于我较早的一个问题,涉及 VBC 和 NAnt 与 WinForms,我已经想出了一个更好的方式来说明这一点。

在 vbproj 文件中,您具有以下内容:

<ItemGroup>
  <None Include="My Project\Settings.settings">
    <Generator>SettingsSingleFileGenerator</Generator>
    <CustomToolNamespace>My</CustomToolNamespace>
    <LastGenOutput>Settings.Designer.vb</LastGenOutput>
  </None>
</ItemGroup>
<ItemGroup>
  <Content Include="My Project\Application.myapp">
    <Generator>MyApplicationCodeGenerator</Generator>
    <LastGenOutput>Application.Designer.vb</LastGenOutput>
  </Content>
</ItemGroup>

当从 Visual Studio 中运行构建(Debug Verbosity 设置为 Normal)时,产生的行之一是:

Target CoreCompile:
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe ...

其中包括运行 vbc.exe 所需的所有设置。但是,从 Visual Studio 中获取该字符串,并直接在命令行上运行它会产生:

... My Project\Settings.Designer.vb(67) : error BC30002: Type 'My.MySettings' is not defined.
        Friend ReadOnly Property Settings() As Global.My.MySettings
...\My Project\Settings.Designer.vb(69) : error BC30456: 'My' is not a member of '<Default>'.
                Return Global.My.MySettings.Default

如何让上述生成器从命令行运行,或者是否有一个调用会生成 vbc.exe 正确运行命令字符串所需的正确临时文件?

4

2 回答 2

4

在 Visual Studio 中查看构建字符串的问题在于它实际上并没有调用 vbc.exe 来从 Visual Studio 构建。Visual Studio 中的所有构建都使用内存编译器而不是命令行编译器进行(对于 C# 也是如此)。

看起来像 vbc.exe ... 的命令是生成的字符串,实际上并未执行。如果您想找出正确的字符串来构建您的项目,请从 Visual Studio 命令提示符运行以下代码。

msbuild /v:diag myproject.vbproj

这将生成一个 msbuild 日志文件(它会很长,所以我建议通过管道传输到文件)。构建完成后,在该文件中搜索 vbc.exe。它将具有构建项目所需的实际命令行。

于 2009-01-07T03:11:41.520 回答
0

我今天花了一些时间来解决这个问题。我想知道关于如何让 vbc 编译器在“我的”命名空间中正常工作的正确答案,但我设法让我的 NAnt 脚本使用 NAnt contrib (http://nantcontrib.sourceforge.网/)。

NAnt contrib 允许您使用 .NET msbuild 进行构建,它至少允许我设置自动构建、通知等。它并没有提供我想要的非常精细的控制,但它达到了它的目的。

这个任务的参考是:

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

以及我的构建脚本中的相关片段:

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

我在 CS 应用程序中使用了很多 NAnt,但这是第一次用于 VB.NET 应用程序。

于 2011-01-27T23:00:25.120 回答