了解使用 Visual Basic 的项目和解决方案
在本介绍性文章中,我们将探讨在 Visual Studio 中创建 解决方案 和 项目 的意义。 解决方案是用于组织一个或多个相关代码项目的容器,例如类库项目和相应的测试项目。 我们将查看项目的属性及其可以包含的一些文件。 此外,我们还会在一个项目中创建对另一项目的引用。
提示
如果尚未安装 Visual Studio,请转到 Visual Studio 下载 页免费安装。
我们将从头开始构建解决方案和项目,作为一项教育练习来了解项目的概念。 在 Visual Studio 的一般使用中,可能会使用 Visual Studio 在创建新项目时提供的一些各种项目 模板。
注意
在 Visual Studio 中开发应用不需要解决方案和项目。 还可以打开包含代码的文件夹,并开始编码、生成和调试。 例如,如果克隆 GitHub 存储库,则它可能不包含 Visual Studio 项目和解决方案。 有关详细信息,请参阅 在没有项目或解决方案的情况下在 Visual Studio 中开发代码。
解决方案和项目
尽管它的名字,但解决方案不是“答案”。 解决方案只是 Visual Studio 用来组织一个或多个相关项目的容器。 在 Visual Studio 中打开解决方案时,它会自动加载解决方案包含的所有项目。
创建解决方案
我们先创建一个空的解决方案。 了解 Visual Studio 后,可能不会发现自己经常创建空解决方案。 创建新项目时,如果尚未打开解决方案,Visual Studio 会自动创建一个解决方案来容纳项目。
打开 Visual Studio。
在开始窗口中,选择 创建新项目。
在 创建新项目 页上,在搜索框中输入 空白解决方案,选择 空白解决方案 模板,然后选择“下一步”。
将解决方案命名 QuickSolution,然后选择 创建。
一个解决方案出现在 Visual Studio 窗口右侧的 解决方案资源管理器 中。 你可能经常使用 解决方案资源管理器 浏览项目的内容。
打开 Visual Studio。
在开始窗口中,选择 创建新项目。
在 创建新项目 页上,在搜索框中输入 空白解决方案,选择 空白解决方案 模板,然后选择“下一步”。
将解决方案命名 QuickSolution,然后选择 创建。
解决方案将显示在 Visual Studio 窗口右侧的解决方案资源管理器中。 你可能经常使用 解决方案资源管理器 浏览项目的内容。
添加项目
现在,让我们将第一个项目添加到解决方案。 我们将从一个空项目开始,并将所需的项添加到项目。
在“解决方案资源管理器”中的“解决方案‘QuickSolution’”的右键菜单或上下文菜单中,依次选择“添加”>“新建项目”。
此时会打开一个对话框,显示 添加新项目。
在顶部的搜索框中输入文本“空”,然后在“语言”下选择“Visual Basic”。
然后选择“空项目(.NET Framework)”模板并选择“下一步”。
将项目命名为 QuickDate,然后选择创建。
名为 QuickDate 的项目显示在解决方案资源管理器 解决方案下方。 目前,它包含名为 App.config的单个文件。
注意
如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载。 Visual Studio 使用基于工作负载的安装来仅安装所需的组件,以便进行开发。 创建新项目时,安装新工作负载的一种简单方法是选择文本“找不到要找的内容?”下的“安装更多工具和功能”链接。 Visual Studio 安装程序启动后,选择 .NET 桌面开发 工作负载,然后选择“修改”按钮。
在“解决方案资源管理器”中的“解决方案‘QuickSolution’”的右键菜单或上下文菜单中,依次选择“添加”>“新建项目”。
此时会打开一个对话框,显示 添加新项目。
在顶部的搜索框中输入文本“空”,然后在“所有语言”下拉列表中选择“Visual Basic”。
然后选择“空项目(.NET Framework)”模板并选择“下一步”。
将项目命名为 QuickDate,然后选择 创建。
名为 QuickDate 的项目显示在解决方案资源管理器 解决方案下方。 目前,它包含名为 App.config的单个文件。
注意
如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载。 Visual Studio 使用基于工作负载的安装来仅安装所需的组件,以便进行开发。 在创建新项目时安装新工作负载的简便方法是,在显示“未找到你要查找的内容”的文本下选择“安装更多工具和功能”链接。 Visual Studio 安装程序启动后,选择 .NET 桌面开发 工作负载,然后选择“修改”按钮。
向项目添加一个项
我们有一个空项目。 让我们添加一个代码文件。
在 解决方案资源管理器中,右键单击 QuickDate 项目,或者在其上下文菜单中选择 “添加”>“新项”。
此时将打开“添加新项”对话框。
展开“常用项”,然后选择“代码”。 在中间窗格中,选择 类 项模板。 将类命名为日历,然后选择“添加”按钮。
将名为 Calendar.vb 的文件添加到项目中。 末尾的 .vb 是提供给 Visual Basic 代码文件的文件扩展名。 该文件显示在 解决方案资源管理器的视觉项目层次结构中,并在编辑器中打开其内容。
将 Calendar.vb 文件的内容替换为以下代码:
Class Calendar Public Shared Function GetCurrentDate() As Date Return DateTime.Now.Date End Function End Class
Calendar
类包含返回当前日期的单个函数GetCurrentDate
。通过在 解决方案资源管理器中双击 “我的项目”,打开项目属性。 在“应用程序”选项卡上,将 应用程序类型 更改为 类库。 若要成功生成项目,必须执行此步骤。
通过在 解决方案资源管理器 中右键单击 QuickDate 并选择 生成来生成项目。 “输出”窗口中会显示一条成功生成消息。
添加第二个项目
解决方案通常包含多个项目,通常这些项目相互引用。 解决方案中的某些项目可能是类库、一些可执行应用程序,有些可能是单元测试项目或网站。
让我们向解决方案添加单元测试项目。 这次我们将从项目模板开始,因此无需向项目添加其他代码文件。
- 在 解决方案资源管理器中,对 解决方案 'QuickSolution' 右键单击,然后从上下文菜单中选择 添加>新建项目。
在“添加新项目”对话框中,在顶部的搜索框中输入文本“单元测试”,然后在“语言”下选择“Visual Basic”。
选择 单元测试项目(.NET Framework) 项目模板,然后选择 下一步。
将项目命名为“QuickTest”,然后选择“创建”。
第二个项目将添加到 解决方案资源管理器,并在编辑器中打开名为 UnitTest1.vb 的文件。
在“添加新项目”对话框中,在顶部的搜索框中输入文本“单元测试”,然后在“所有语言”下拉列表中选择“Visual Basic”。
选择单元测试项目(.NET Framework) 项目模板,然后选择下一步。
将项目命名 QuickTest,然后选择 “创建”。
第二个项目将添加到 解决方案资源管理器,并在编辑器中打开名为 UnitTest1.vb 的文件。
添加项目引用
我们将使用新的单元测试项目在 QuickDate 项目中测试方法,因此我们需要添加对该项目的引用。 该引用在两个项目之间创建一个 生成依赖项,这意味着在生成解决方案时,QuickDate 在 QuickTest之前生成。
选择“QuickTest”项目中的“引用”节点,然后在右键菜单或上下文菜单中选择“添加引用”。
此时将打开 引用管理器 对话框。
在左窗格中,展开 项目 并选择 解决方案。 在中间窗格中,选择 QuickDate旁边的复选框,然后选择 确定 按钮。
添加了对 QuickDate 项目的引用。
选择“QuickTest”项目中的“引用”节点,然后在右键菜单或上下文菜单中选择“添加引用”。
此时将打开 引用管理器 对话框。
在左窗格中,展开 项目 并选择 解决方案。 在中间窗格中,选择 QuickDate旁边的复选框,然后选择 确定 按钮。
添加了对 QuickDate 项目的引用。
添加测试代码
现在,我们将向 Visual Basic 代码文件添加测试代码。 将 UnitTest1.vb 的内容替换为以下代码。
<TestClass()> Public Class UnitTest1 <TestMethod()> Public Sub TestGetCurrentDate() Assert.AreEqual(Date.Now.Date, QuickDate.Calendar.GetCurrentDate()) End Sub End Class
你会看到某些代码下出现红色波浪线。 将测试项目设为“QuickDate”项目的友元程序集来解决此错误。
返回 QuickDate 项目,打开 Calendar.vb 文件(如果尚未打开),并添加以下 Imports 语句 和 InternalsVisibleToAttribute 属性,以解决测试项目中的错误。
Imports System.Runtime.CompilerServices <Assembly: InternalsVisibleTo("QuickTest")>
代码文件应如下所示:
现在,我们将向 Visual Basic 代码文件添加测试代码。 将 UnitTest1.vb 的内容替换为以下代码。
<TestClass()> Public Class UnitTest1 <TestMethod()> Public Sub TestGetCurrentDate() Assert.AreEqual(Date.Now.Date, QuickDate.Calendar.GetCurrentDate()) End Sub End Class
你会看到某些代码下出现红色波浪线。 将测试项目设为“QuickDate”项目的友元程序集来解决此错误。
返回 QuickDate 项目,打开 Calendar.vb 文件(如果尚未打开),并添加以下 Imports 语句 和 InternalsVisibleToAttribute 属性,以解决测试项目中的错误。
Imports System.Runtime.CompilerServices <Assembly: InternalsVisibleTo("QuickTest")>
代码文件应如下所示:
项目属性
包含 InternalsVisibleToAttribute 属性的 Calendar.vb 文件中的行引用 QuickTest 项目的程序集名称(文件名)。 程序集名称可能并不总是与项目名称相同。 若要查找项目的程序集名称,请打开项目属性。
在 解决方案资源管理器中,选择 QuickTest 项目。 在右键菜单或上下文菜单中,选择“属性”,或只按 Alt+Enter 即可。 (还可以在 解决方案资源管理器中双击 “我的项目”。)
项目的 属性页 会在 应用程序 选项卡上打开。属性页包含项目的各种设置。 请注意,QuickTest 项目的程序集名称确实为“QuickTest”。 如果想要更改程序集名称,可在此处执行此操作。 然后,当你构建测试项目时,生成的二进制文件名称将从 QuickTest.dll 更改为你选择的名称。
了解项目属性页的其他选项卡,例如“编译”和“设置”。 对于不同类型的项目,这些选项卡不同。
包含 InternalsVisibleToAttribute 属性的 Calendar.vb 文件中的行引用 QuickTest 项目的程序集名称(文件名)。 程序集名称可能并不总是与项目名称相同。 若要查找项目的程序集名称,请打开项目属性。
在 解决方案资源管理器中,选择 QuickTest 项目。 在鼠标右键菜单或上下文菜单中,选择 属性,或者只需按 Alt+Enter键。 (还可以在“解决方案资源管理器”中双击“我的项目”)
项目的“属性页”随即在“应用程序”选项卡上打开。属性页包含项目的各种设置。 请注意,QuickTest 项目的程序集名称确实为“QuickTest”。 如果想要更改程序集名称,可在此处执行此操作。 然后,你在构建测试项目时,生成的二进制文件名称会从 QuickTest.dll 更改为你选择的名称。
了解项目属性页的其他选项卡,例如“编译”和“设置”。 对于不同类型的项目,这些选项卡不同。
(可选)运行测试
若希望检查单元测试是否正常工作,请从菜单栏依次选择“测试”>“运行”>“所有测试”。 此时名为“测试资源管理器”的窗口打开,你应该会看到“TestGetCurrentDate”测试通过。
提示
如果 测试资源管理器 未自动打开,请从菜单栏中选择 测试>Windows>测试资源管理器 将其打开。
如果要检查单元测试是否正常工作,请从菜单栏中选择 测试>运行所有测试。 此时名为“测试资源管理器”的窗口打开,你应该会看到“TestGetCurrentDate”测试通过。
提示
如果 测试资源管理器 未自动打开,请从菜单栏中选择 测试>Windows>测试资源管理器 将其打开。
后续步骤
若要进一步探索 Visual Studio,请考虑按照 Visual Basic 教程之一创建应用。