项目和解决方案简介
在本教程中,你将了解在 Visual Studio 中创建 解决方案 和 项目 的意义。 解决方案是用于组织一个或多个相关代码项目的容器,例如类库项目和相应的测试项目。 你在一个解决方案中创建从一个项目到另一个项目的引用。 本教程还介绍了项目的属性及其可以包含的某些文件。
作为了解项目概念的练习,可以从头开始创建解决方案和项目。 通常,使用 Visual Studio 项目 模板 创建新项目。
本教程介绍如何:
- 向项目添加一个项
- 添加第二个项目
- 添加项目引用
- 添加测试代码
- 查看项目属性
先决条件
- 如果还没有 Visual Studio 2019,请前往 Visual Studio 下载页面 免费安装。
- 如果没有 Visual Studio,请访问 Visual Studio 下载页面 以免费安装。
解决方案和项目
在 Visual Studio 中,解决方案不是“答案”。 解决方案只是 Visual Studio 用来组织一个或多个相关项目的容器。 打开解决方案时,Visual Studio 会自动加载解决方案包含的所有项目。
备注
在 Visual Studio 中开发应用不需要解决方案和项目。 只需打开包含代码的文件夹,即可开始编码、生成和调试。 例如,克隆的 GitHub 存储库可能不包含 Visual Studio 项目和解决方案。 有关详细信息,请参阅 在没有项目或解决方案的情况下在 Visual Studio 中开发代码。
创建解决方案
首先创建一个空解决方案,以此来开始探索。 了解 Visual Studio 后,可能不会经常创建空的解决方案。 创建新项目时,Visual Studio 会自动为项目创建解决方案,除非解决方案已打开。
打开 Visual Studio。
在开始窗口中,选择 创建新项目。
在 创建新项目 页上,在搜索框中输入 空白解决方案,选择 空白解决方案 模板,然后选择 下一步。
提示
如果安装了多个工作负载,则 空白解决方案 模板可能不会显示在搜索结果列表顶部。 尝试滚动到列表的“基于你搜索的其他结果”部分。 它应该出现在那里。
将解决方案命名 QuickSolution,然后选择 创建。
在 Visual Studio 窗口的右侧,解决方案出现在 解决方案资源管理器 中。 你可能经常使用 解决方案资源管理器 浏览项目的内容。
添加项目
现在,将第一个项目添加到解决方案。 从空项目开始,并添加所需的项。
在 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 在上下文菜单中,选择 "添加>新建项目"。
此时会打开一个对话框,显示 添加新项目。
在顶部的搜索框中输入文本“空”,然后在“语言”下选择“C#”。
然后选择“空项目 (.NET Framework)”模板并选择“下一步”。
将项目命名为“QuickDate”,然后选择“创建”。
名为 QuickDate 的项目显示在解决方案资源管理器 解决方案下方。 目前,它包含名为 App.config的单个文件。
备注
如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载。 Visual Studio 使用基于工作负荷的安装来仅安装所需的组件,以便进行所需的开发类型。
创建新项目时,安装新工作负荷的一种简单方法是选择“安装更多工具和功能”的链接,该链接位于“没有找到您想要的?”的文字下方。 Visual Studio 安装程序启动后,选择 .NET 桌面开发 工作负载,然后选择“修改”按钮。
在 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 在上下文菜单中,选择“添加>新建项目”。
在“添加新项目”页面顶部的搜索框中键入“空”,然后在“所有语言”下选择“C#”。
选择 C#“空项目(.NET Framework)”模板,然后选择“下一步”。
备注
Visual Studio 使用基于工作负荷的安装来仅安装所需的组件,以便进行所需的开发类型。 如果没有看到“空项目(.NET Framework)”模板,则需要安装 .NET 桌面开发 Visual Studio 工作负载。
在创建新项目时安装新工作负载的简便方法是,在显示“未找到你要查找的内容”的文本下选择“安装更多工具和功能”链接。 在 Visual Studio 安装程序中,选择 .NET 桌面开发 工作负载,然后选择 修改。
在 配置新项目 页上,将项目命名为 QuickDate,然后选择 创建。
QuickDate 项目随即出现在“解决方案资源管理器”中的解决方案下。 该项目包含一个 引用 节点和一个名为 App.config的文件。
向项目添加一个项
将代码文件添加到空项目。
在 解决方案资源管理器中,右键单击 QuickDate 项目。 在上下文菜单中,选择添加>新项。
此时将打开“添加新项”对话框。 如果对话框在压缩视图中打开,请选择 显示所有模板。
展开“Visual C# 项”,然后选择“代码”。 在中间窗格中,选择 类 项模板。 在 名称下,键入 日历,然后选择 添加。
Visual Studio 将名为 Calendar.cs 的文件添加到项目中。 末尾的
.cs
是 C# 代码文件的文件扩展名。 Calendar.cs 文件显示在 解决方案资源管理器 视觉对象项目层次结构中,该文件将在编辑器中打开。将 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同时按下来运行应用。 应用将今天的日期打印到 控制台或标准输出窗口。 然后,关闭控制台窗口。
添加第二个项目
解决方案通常包含多个项目,这些项目通常相互引用。 解决方案中的某些项目可能是类库,有些可能是可执行应用程序,有些可能是单元测试项目或网站。
若要将单元测试项目添加到解决方案,请从项目模板开始,这样就不必向项目添加其他代码文件。
在 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 从上下文菜单中选择 添加>新建项目。
在“添加新项目”对话框中,在顶部的搜索框输入文本“单元测试”,然后在“语言”下选择“C#”。
选择适用于 .NET Core 的 单元测试项目 项目模板,然后选择 下一步。
说明
从 Visual Studio 2019 版本 16.9 开始,MSTest 项目模板名称从 MSTest 单元测试项目(.NET Core) 更改为 单元测试项目。 在此更新中,项目创建中的几个步骤已更改。
将项目命名为QuickTest,然后选择下一步。
选择建议的目标框架(.NET Core 3.1)或 .NET 5,然后选择 创建。
第二个项目将添加到 解决方案资源管理器,并在编辑器中打开名为 UnitTest1.cs 的文件。
在 解决方案资源管理器中,右键单击 解决方案“QuickSolution”。 从上下文菜单中选择“添加>新建项目”。
在“添加新项目”对话框顶部的搜索框中键入“单元测试”,然后在“语言”下选择“C#”。
选择 C# 单元测试项目 (.NET Framework) 模板,然后选择 下一步。
在 “配置新项目” 页上,将项目命名为 QuickTest,然后选择 “创建”。
Visual Studio 将 QuickTest 项目添加到 解决方案资源管理器,UnitTest1.cs 文件将在编辑器中打开。
添加项目引用
若要使用新的单元测试项目在 QuickDate 项目中测试方法,需要向 QuickTest 项目添加对 QuickDate 的引用。 添加引用会在两个项目之间创建 生成依赖项。 当生成解决方案时,QuickDate 在 QuickTest之前生成。
右键单击 QuickTest 项目中 依赖项 节点。 从上下文菜单中选择“添加项目引用”。
此时将打开 引用管理器 对话框。
在左窗格中,展开 项目,然后选择 解决方案。 在中间窗格中,选中 QuickDate旁边的复选框,然后选择“确定”。
添加了对 QuickDate 项目的引用。
在“解决方案资源管理器”中,右键单击 QuickTest 项目的“引用”节点。 在上下文菜单中,选择“添加引用”。
在 引用管理器 对话框中,选择 项目。 在中间窗格中,选中 QuickDate旁边的复选框,然后选择“确定”。
在 解决方案资源管理器中,QuickTest 项目下方会显示一个对 QuickDate 项目的引用。
添加测试代码
现在,将测试代码添加到 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 项目的友元程序集来解决此错误。
在 Calendar.cs 文件中,将以下 using 语句和 InternalsVisibleToAttribute 属性添加到文件顶部,以解决测试项目中的错误。
using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("QuickTest")]
Calendar.cs 代码应如以下屏幕截图所示:
显示 C Sharp 代码的
运行单元测试
若要检查单元测试是否正常工作,请在菜单栏中选择 “测试”>“运行所有测试”。 “测试资源管理器”窗口随即打开,你应该会看到 TestGetCurrentDate 测试通过。
提示
还可以在菜单栏中选择“测试”>“测试资源管理器”,以打开“测试资源管理器”。
项目属性
包含 InternalsVisibleToAttribute 属性的 Calendar.cs 文件中的行引用了 QuickTest 项目的程序集名称或文件名。 程序集名称可能并不总是与项目名称相同。 若要查找项目的程序集名称,请使用项目属性。 属性页包含项目的各种设置。
在“解决方案资源管理器”中,右键单击 QuickTest 项目,然后选择“属性”,或者选择该项目,然后按 Alt+Enter。
项目的 属性页 会打开到 应用程序 选项卡。QuickTest 项目的 程序集名称 真的就是 QuickTest。
如果需要,可以在此处更改名称。 生成测试项目时,生成的二进制文件的名称将从 QuickTest.dll 更改为 <NewName>.dll。
浏览项目属性页中的一些其他选项卡,例如 生成 和 调试。 对于不同类型的项目,这些选项卡不同。