项目和解决方案简介

在本教程中,你将了解在 Visual Studio 中创建 解决方案项目 的意义。 解决方案是用于组织一个或多个相关代码项目的容器,例如类库项目和相应的测试项目。 你在一个解决方案中创建从一个项目到另一个项目的引用。 本教程还介绍了项目的属性及其可以包含的某些文件。

作为了解项目概念的练习,可以从头开始创建解决方案和项目。 通常,使用 Visual Studio 项目 模板 创建新项目。

本教程介绍如何:

  • 向项目添加一个项
  • 添加第二个项目
  • 添加项目引用
  • 添加测试代码
  • 查看项目属性

先决条件

解决方案和项目

在 Visual Studio 中,解决方案不是“答案”。 解决方案只是 Visual Studio 用来组织一个或多个相关项目的容器。 打开解决方案时,Visual Studio 会自动加载解决方案包含的所有项目。

备注

在 Visual Studio 中开发应用不需要解决方案和项目。 只需打开包含代码的文件夹,即可开始编码、生成和调试。 例如,克隆的 GitHub 存储库可能不包含 Visual Studio 项目和解决方案。 有关详细信息,请参阅 在没有项目或解决方案的情况下在 Visual Studio 中开发代码。

创建解决方案

首先创建一个空解决方案,以此来开始探索。 了解 Visual Studio 后,可能不会经常创建空的解决方案。 创建新项目时,Visual Studio 会自动为项目创建解决方案,除非解决方案已打开。

  1. 打开 Visual Studio。

  2. 在开始窗口中,选择 创建新项目

  3. 创建新项目 页上,在搜索框中输入 空白解决方案,选择 空白解决方案 模板,然后选择 下一步

    显示 Visual Studio 2019 中选择的空白解决方案模板的屏幕截图。

    提示

    如果安装了多个工作负载,则 空白解决方案 模板可能不会显示在搜索结果列表顶部。 尝试滚动到列表的“基于你搜索的其他结果”部分。 它应该出现在那里。

  4. 将解决方案命名 QuickSolution,然后选择 创建

    在 Visual Studio 窗口的右侧,解决方案出现在 解决方案资源管理器 中。 你可能经常使用 解决方案资源管理器 浏览项目的内容。

  1. 打开 Visual Studio,然后在开始窗口中,选择 创建新项目

  2. 创建新项目 页上,在搜索框中键入 空白解决方案,选择 空白解决方案 模板,然后选择 下一步

    显示 Visual Studio 中选择的空白解决方案模板的屏幕截图。

    提示

    如果安装了多个工作负载,则 空白解决方案 模板可能不会显示在搜索结果列表顶部。 尝试滚动浏览“基于你搜索的其他结果”以查找模板

  3. 配置新项目 页上,将解决方案命名为 QuickSolution,然后选择 创建

    QuickSolution 解决方案显示在 Visual Studio 窗口右侧 解决方案资源管理器 中。 你将经常使用 解决方案资源管理器 浏览项目的内容。

添加项目

现在,将第一个项目添加到解决方案。 从空项目开始,并添加所需的项。

  1. 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 在上下文菜单中,选择 "添加>新建项目"

    此时会打开一个对话框,显示 添加新项目

  2. 在顶部的搜索框中输入文本“空”,然后在“语言”下选择“C#”

  3. 然后选择“空项目 (.NET Framework)”模板并选择“下一步”

  4. 将项目命名为“QuickDate”,然后选择“创建”

    名为 QuickDate 的项目显示在解决方案资源管理器 解决方案下方。 目前,它包含名为 App.config的单个文件。

    备注

    如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载。 Visual Studio 使用基于工作负荷的安装来仅安装所需的组件,以便进行所需的开发类型。

    创建新项目时,安装新工作负荷的一种简单方法是选择“安装更多工具和功能”的链接,该链接位于“没有找到您想要的?”的文字下方。 Visual Studio 安装程序启动后,选择 .NET 桌面开发 工作负载,然后选择“修改”按钮。

    显示“打开 Visual Studio 安装程序”链接的屏幕截图。

  1. 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 在上下文菜单中,选择“添加>新建项目”

  2. 在“添加新项目”页面顶部的搜索框中键入“空”,然后在“所有语言”下选择“C#”

  3. 选择 C#“空项目(.NET Framework)”模板,然后选择“下一步”

    备注

    Visual Studio 使用基于工作负荷的安装来仅安装所需的组件,以便进行所需的开发类型。 如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载

    在创建新项目时安装新工作负载的简便方法是,在显示“未找到你要查找的内容”的文本下选择“安装更多工具和功能”链接。 在 Visual Studio 安装程序中,选择 .NET 桌面开发 工作负载,然后选择 修改

    显示“打开 Visual Studio 安装程序”链接的屏幕截图。

  4. 配置新项目 页上,将项目命名为 QuickDate,然后选择 创建

    QuickDate 项目随即出现在“解决方案资源管理器”中的解决方案下。 该项目包含一个 引用 节点和一个名为 App.config的文件。

向项目添加一个项

将代码文件添加到空项目。

  1. 解决方案资源管理器中,右键单击 QuickDate 项目。 在上下文菜单中,选择添加>新项

    此时将打开“添加新项”对话框。 如果对话框在压缩视图中打开,请选择 显示所有模板

  2. 展开“Visual C# 项”,然后选择“代码”。 在中间窗格中,选择 项模板。 在 名称下,键入 日历,然后选择 添加

    Visual Studio 将名为 Calendar.cs 的文件添加到项目中。 末尾的 .cs 是 C# 代码文件的文件扩展名。 Calendar.cs 文件显示在 解决方案资源管理器 视觉对象项目层次结构中,该文件将在编辑器中打开。

  3. Calendar.cs 文件的内容替换为以下代码:

    using System;
    
    namespace QuickDate
    {
        internal class Calendar
        {
            static void Main(string[] args)
            {
                DateTime now = GetCurrentDate();
                Console.WriteLine($"Today's date is {now}");
                Console.ReadLine();
            }
    
            internal static DateTime GetCurrentDate()
            {
                return DateTime.Now.Date;
            }
        }
    }
    

    你无需了解代码正在执行的所有操作。 按 Ctrl +F5同时按下来运行应用。 应用将今天的日期打印到 控制台或标准输出窗口。 然后,关闭控制台窗口。

添加第二个项目

解决方案通常包含多个项目,这些项目通常相互引用。 解决方案中的某些项目可能是类库,有些可能是可执行应用程序,有些可能是单元测试项目或网站。

若要将单元测试项目添加到解决方案,请从项目模板开始,这样就不必向项目添加其他代码文件。

  1. 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 从上下文菜单中选择 添加>新建项目

  2. 在“添加新项目”对话框中,在顶部的搜索框输入文本“单元测试”,然后在“语言”下选择“C#”

  3. 选择适用于 .NET Core 的 单元测试项目 项目模板,然后选择 下一步

    说明

    从 Visual Studio 2019 版本 16.9 开始,MSTest 项目模板名称从 MSTest 单元测试项目(.NET Core) 更改为 单元测试项目。 在此更新中,项目创建中的几个步骤已更改。

  4. 将项目命名为QuickTest,然后选择下一步

  5. 选择建议的目标框架(.NET Core 3.1)或 .NET 5,然后选择 创建

    第二个项目将添加到 解决方案资源管理器,并在编辑器中打开名为 UnitTest1.cs 的文件。

    屏幕截图,其中显示了包含两个项目的解决方案资源管理器。

  1. 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 从上下文菜单中选择“添加>新建项目”

  2. 在“添加新项目”对话框顶部的搜索框中键入“单元测试”,然后在“语言”下选择“C#”

  3. 选择 C# 单元测试项目 (.NET Framework) 模板,然后选择 下一步

  4. “配置新项目” 页上,将项目命名为 QuickTest,然后选择 “创建”

    Visual Studio 将 QuickTest 项目添加到 解决方案资源管理器UnitTest1.cs 文件将在编辑器中打开。

    显示包含两个项目的解决方案资源管理器的屏幕截图。

添加项目引用

若要使用新的单元测试项目在 QuickDate 项目中测试方法,需要向 QuickTest 项目添加对 QuickDate 的引用。 添加引用会在两个项目之间创建 生成依赖项。 当生成解决方案时,QuickDateQuickTest之前生成。

  1. 右键单击 QuickTest 项目中 依赖项 节点。 从上下文菜单中选择“添加项目引用”

    此时将打开 引用管理器 对话框。

  2. 在左窗格中,展开 项目,然后选择 解决方案。 在中间窗格中,选中 QuickDate旁边的复选框,然后选择“确定”

    添加了对 QuickDate 项目的引用。

    解决方案资源管理器的屏幕截图,其中显示了 Visual Studio 2019 中的项目引用。

  1. 在“解决方案资源管理器”中,右键单击 QuickTest 项目的“引用”节点。 在上下文菜单中,选择“添加引用”

  2. 引用管理器 对话框中,选择 项目。 在中间窗格中,选中 QuickDate旁边的复选框,然后选择“确定”

    解决方案资源管理器中,QuickTest 项目下方会显示一个对 QuickDate 项目的引用。

    解决方案资源管理器中有关项目引用的屏幕截图。

添加测试代码

  1. 现在,将测试代码添加到 C# 测试代码文件。 将 UnitTest1.cs 的内容替换为以下代码:

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace QuickTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestGetCurrentDate()
            {
                Assert.AreEqual(DateTime.Now.Date, QuickDate.Calendar.GetCurrentDate());
            }
        }
    }
    

    一些代码下方会出现红色波浪线。 你可以通过将测试项目设为 QuickDate 项目的友元程序集来解决此错误

  2. 在 Calendar.cs 文件中,将以下 using 语句InternalsVisibleToAttribute 属性添加到文件顶部,以解决测试项目中的错误

    using System.Runtime.CompilerServices;
    
    [assembly: InternalsVisibleTo("QuickTest")]
    

    Calendar.cs 代码应如以下屏幕截图所示:

    显示 C Sharp 代码的屏幕截图。

    显示 C Sharp 代码的 屏幕截图。

运行单元测试

若要检查单元测试是否正常工作,请在菜单栏中选择 “测试”>“运行所有测试”。 “测试资源管理器”窗口随即打开,你应该会看到 TestGetCurrentDate 测试通过

屏幕截图显示的测试资源管理器包含通过的测试。

屏幕截图显示的测试资源管理器包含通过的测试。

提示

还可以在菜单栏中选择“测试”>“测试资源管理器”,以打开“测试资源管理器”

项目属性

包含 InternalsVisibleToAttribute 属性的 Calendar.cs 文件中的行引用了 QuickTest 项目的程序集名称或文件名。 程序集名称可能并不总是与项目名称相同。 若要查找项目的程序集名称,请使用项目属性。 属性页包含项目的各种设置。

  1. 在“解决方案资源管理器”中,右键单击 QuickTest 项目,然后选择“属性”,或者选择该项目,然后按 Alt+Enter

    项目的 属性页 会打开到 应用程序 选项卡。QuickTest 项目的 程序集名称 真的就是 QuickTest

    如果需要,可以在此处更改名称。 生成测试项目时,生成的二进制文件的名称将从 QuickTest.dll 更改为 <NewName>.dll

    显示项目属性的屏幕截图。

    显示项目属性的屏幕截图。

  2. 浏览项目属性页中的一些其他选项卡,例如 生成调试。 对于不同类型的项目,这些选项卡不同。