65.9K
CodeProject 正在变化。 阅读更多。
Home

无需 Microsoft.VisualBasic.dll 即可编译 VB.NET 代码

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.97/5 (11投票s)

2006 年 7 月 27 日

CPOL

2分钟阅读

viewsIcon

108243

无需显式引用 Microsoft.VisualBasic.dll 即可编译 VB.NET 代码。

引言

假设您正在使用 Visual Basic .NET(2003 或 2005)开发程序,并且希望确保您的代码使用的是“纯” .NET,并且不包含 VB6 的任何内容。

背景

如大家所知,Visual Basic .NET 允许您使用 VB 6 的遗留语法和关键字进行编码。例如,我们可以使用 CIntMidInStr 等。兼容性层的实现位于 Microsoft.VisualBasic.dll 库中。

幕后

在使用 Visual Studio IDE 或 vbc 命令行编译器编译程序时,Microsoft.VisualBasic.dll 会被添加为引用,并且没有直接的方法可以删除此引用。官方(但不太合理的)解决方案是在 vbc 中添加 -sdkpath 命令行选项(您无法在 VB Visual Studio 项目中设置此选项)。将项目引用所需的 .NET 平台程序集复制到不同的目录中,并从命令行构建程序,并将 -sdkpath 指向该目录。

幕后真相

存在一个未记录的 vbc 命令行选项 -novbruntimeref,您可以将其用作 -sdkpath 的替代方案(请自行承担风险 :)。添加 -novbruntimeref 将排除隐式添加 Microsoft.VisualBasic.dll 引用。例如,如果使用 Mid 而不是 Substring,则使用 -novbruntimeref 选项进行编译将失败。

现在,您的编译不再依赖 VB6。请不要误会,VB 自 VB3 起一直是我的好朋友,我的一些最好的朋友是……好吧,您明白我的意思。

我应该停止使用 Microsoft.VisualBasic 命名空间吗?

是与否。

否 - 效率。 如果您希望使用 VB6 的 Mid 代替 Substring 来解析字符串,这取决于您。毕竟,该层是为了让您能够无缝地将 VB6 应用程序导入 .NET,而无需更改代码而创建的。

是 - 兼容性。 例如,VB6 集合在读取时从 0 开始,在插入时从 -1 开始。使用通过不一致的 IList 实现的 VB 集合的升级应用程序可能会遇到一些错误。

这两个点都非常重要。选择权完全在于您。

© . All rights reserved.