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






2.97/5 (11投票s)
无需显式引用 Microsoft.VisualBasic.dll 即可编译 VB.NET 代码。
引言
假设您正在使用 Visual Basic .NET(2003 或 2005)开发程序,并且希望确保您的代码使用的是“纯” .NET,并且不包含 VB6 的任何内容。
背景
如大家所知,Visual Basic .NET 允许您使用 VB 6 的遗留语法和关键字进行编码。例如,我们可以使用 CInt
、Mid
、InStr
等。兼容性层的实现位于 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 集合的升级应用程序可能会遇到一些错误。
这两个点都非常重要。选择权完全在于您。