2019 年 9 月

第 34 卷,第 9 期

[开篇寄语]

.NET Core 上的 Visual Basic

作者:Kathleen Dollard | 2019 年 9 月

我二十多年前就开始编写 Visual Basic 代码,也明白现在许多人仍在使用 Visual Basic .NET 编程的原因。它几乎具有 C# 的所有功能,加上其自身独特的功能,可让你更容易专注于软件完成的工作。这不仅来自语言本身的功能,还来自语言扩展和语言稳定性。Visual Basic 还具有独特的生产力功能,例如 XML 文本和就地事件关联。

现在,Visual Basic .NET 16.0 会把你最喜爱的 Visual Basic 功能引入 .NET Core 3.0。自早期开发以来,Visual Basic .NET 编程语言的必备部件就一直位于 .NET Core 上,但当 Microsoft 发布支持 Visual Basic 16.0 和 C# 8.0 的 Visual Studio 16.3 和 .NET Core 3.0 时,开发人员可以期待获得丰富的体验。

在转换 .NET Core 的过程中,我能够深入研究语言扩展背后的技术:特殊功能、应用程序模型和“我的”子系统。这些功能包含在 Microsoft.visualbasic.dll(也称为 Visual Basic 运行时)中,除了依赖于 Windows 窗体 (WinForms) 的功能,现在许多功能都包含在 .NET Core 3.0 中。

Windows 窗体

Visual Basic .NET 与 WinForms 有着特殊的关系,WinForms 主要在 Visual Basic 的早期版本中进行建模。在 .NET 程序员必须生成应用程序的所有选项中,WinForms 仍然是最快完成工作的选项。除了传统角色,WinForms 还提供一种快速的方法为本地服务或云服务开发精简前端,可用于生产或功能原型。

虽然即将推出 WinForms 库,但 Visual Studio 16.3 中没有 WinForms 设计器。这点导致体验有限,因此 Visual Basic .NET 团队决定重点关注适用于 Visual Basic 16.0 的语言扩展的非 WinForms 部分。这表示可以搭配使用 .NET Core 上的 WinForms 和 Visual Basic,但没有可启动 Visual Basic 应用程序模型的项目属性对话框。你需要使用 Sub Main 或启动窗体,还会发现“我的”功能尚不可用。

Visual Basic 运行时的某些部分依赖于 WinForms,这点对于 My.Computer 这类意外类型也是如此。将运行时拆分为依赖于 WinForms 的部件和非依赖于 WinForms 的部分,依赖于 WinForms 的部分将出现在 Visual Basic 的未来版本中。

除了这些限制,Visual Basic .NET 16.0 还将 Visual Basic 运行时的大部分功能都引入 .NET Core。其中包括你期望的关键功能,如“修复”和“混合”。来自 API 端口的遥测内容有助于团队设置当前的工作优先级,未移植某些使用率非常低的功能。

开放性和稳定性

Visual Basic .NET 16.0 具有社区成员移植的财务和文件功能。当然,Visual Basic .NET 自 2015 年以来一直处于开放源代码状态。你可以在一些重要的领域做出贡献,其中许多领域并不像 Roslyn 编译器那样令人生畏!还可以参与 Facebook 和 Gitter 上 Visual Basic .NET 社区的复兴。如需深入了解有关社区和语言设计的信息,请访问 Visual Basic .NET 语言设计网站 (github.com/dotnet/vblang)。

最新版本的 Visual Basic 直接移植了运行时。而对“清理”功能未进行任何更改和操作。.NET Core 中和 .NET Framework 中的工作原理应相同。所有这些都是 Visual Basic 团队为提升稳定性而做出深刻承诺的一部分。当然,这种稳定性对于后向兼容性非常重要,但该承诺已扩展到确保在 Visual Basic 发展过程的各阶段所编写的代码仍然易于阅读。新功能被逐渐添加到 Visual Basic .NET 中,并且仅添加 Visual Basic 中使用起来感觉自然的功能。

可以使用 Visual Studio 开发面向 .NET Core 或 .NET Framework(.NET 4.8 及更低版本)的应用程序。虽然 .NET Framework 将长期处于支持状态,但开发 .NET Core 上的应用程序会带来许多优势,包括并行部署和独立部署,可以消除其他应用程序的安装对生产计算机进行更改时出现的问题。WinForms 具有一些新功能,例如具有更好的 DPI 支持。未来,.NET、Visual Basic .NET 和 C# 中的新功能仅在 .NET Core 上可用。在 Visual Basic 中,只需面向 .NET Core 3.0 (netcoreapp2.2),即可获得 Visual Basic 16.0 的优势。

跨平台支持

尽管 WinForms、Windows Presentation Foundation 和其他 Windows 特定的功能仅适用于 Windows,但 .NET Core 上的 Visual Basic .NET 是跨平台的。有关支持的操作系统,请参阅 aka.ms/net-core-3-0-supported-os。如果在 Linux 这样的操作系统上运行 Visual Basic .NET 应用程序,则跨平台运行的功能将正常运行。如果调用在该平台上无法正常运行的 Visual Basic 运行时功能,则会出现 System.PlatformNotSupportedException,并显示类似于“此平台上不支持 <method>。”的消息。 这与 .NET 的其余部分相同,因此,如果要跨平台工作,则无论使用何种语言,都需要在预期部署的操作系统上测试应用程序。

.NET Core 3.0 上不支持某些项目类型。例如,任何语言中都不支持 WebForms。由于 ASP.NET Core Razor 不支持 Visual Basic,因此不能直接移植 MVC 应用程序。虽然 Microsoft 不提供 100% Visual Basic 的 Web 开发模型,但可以在具有 JavaScript 前端的 ASP.NET WebAPI 中使用 Visual Basic,或在 C# Razor 项目中创建具有视图的组合应用。

API 可移植性分析器

运行 API 可移植性分析器可以测试应用程序的兼容性。该工具可作为 Visual Studio 扩展从 Visual Studio 库中下载,或作为命令行工具下载。查找详细信息,请访问 aka.ms/api-portability。API 可移植性分析器输出一张电子表格,列出应用程序在所选平台(在本例中为 .NET Core 3.0)中正常运行的百分比。可通过其他选项卡深入了解应用程序中使用的特定 API 以及不支持的 API。

请留下宝贵建议!

团队希望了解 Visual Basic .NET 程序员迁移到 .NET Core 的过程中所面临的问题,请你在该过程的下一阶段提供帮助。如果在运行可移植性分析器时,发现 VisualBasic 命名空间中缺少所需的内容,或发现其他 Visual Basic 特定的问题,请在 Visual Basic .NET 语言设计网站 (github.com/dotnet/vblang) 上创建问题或评论现有问题,让我们知道你的情况。

我们使用 .NET Core 所完成的工作为未来设置 Visual Basic。加以 Microsoft 对 .NET Framework 4.8 的长期承诺,可以灵活地使用 Visual Basic(有史以来最高效的编程语言之一)中的新旧应用程序。

对 Visual Studio 和 .NET Core 安装程序的更改

如果在命令提示符下运行“dotnet --info”,会看到已安装的 .NET Core SDK 和运行时的列表。结果可能比你预想的多得多!

早期的 Visual Studio 和 .NET Core 安装程序在更新或卸载时,尚未删除较旧的 SDK 和运行时。虽然可能会需要这些工具来支持通过 global.json 定位 SDK,或面向较旧的运行时,但它们可能只是未在计算机上使用过。

现在,从 Visual Studio 2019 16.3 开始,Visual Studio 将管理各版本 .NET Core SDK 及其安装的运行时。在每台计算机的每个通道(预览或发布)上仅保留一个 .NET Core SDK 副本,并安装最新的运行时。可通过在 Visual Studio 安装程序的“单个组件”选项卡中,选择早期运行时(以及其模板和目标包)来定位这些运行时。

dotnet.microsoft.com/download 中下载并安装 .NET Core 3.0 SDK 时,现在会删除同一功能区段中的早期修补程序。例如,安装 3.0.102 时将卸载 3.0.100。还会删除该区段中的预览。

每个版本的 SDK 都可以面向所有早期版本的运行时,因此通常只需要一个版本的 SDK。如果需要其他 SDK 或运行时,可以从 dotnet.microsoft.com/download 中下载。

可以手动删除 .NET Core SDK 和运行时,也可以使用 Windows 和 macOS 上最近发布的 .NET Core 卸载工具进行清理 (aka.ms/remove-sdk-runtime)。请注意,Visual Studio 不会跟踪 SDK,因此删除错误的 SDK 可能导致出现问题。如果删除了 Visual Studio 需要的内容,请在 Visual Studio 安装程序中运行“修复”。


Kathleen Dollard 是 Microsoft .NET Core 团队的首席项目经理。她是 Visual Basic 的项目经理,致力于发展托管语言,并从事 .NET Core CLI 和 SDK 方面的工作。


在 MSDN 杂志论坛讨论这篇文章