项目和解决方案简介
在这篇介绍性的文章中,我们将探讨如何在 Visual Studio 中创建解决方案和项目 。 解决方案是一个容器,用于组织一个或多个相关的代码项目,例如,类库项目和对应的测试项目。
你将从头开始构建解决方案和项目,我们以此作为教学手段来帮助你理解项目的概念。 通常,你将使用 Visual Studio 项目模板来创建新项目。 你还将了解项目的属性及其包含的部分文件,并创建从一个项目到另一个项目的引用。
注意
在 Visual Studio 中开发应用不需要用到解决方案和项目。 你可直接打开包含代码的文件夹,然后便可开始进行编码、生成和调试。 例如,克隆的 GitHub 存储库可能不包含 Visual Studio 项目和解决方案。 有关详细信息,请参阅在 Visual Studio 中开发代码而无需创建项目或解决方案。
如果尚未安装 Visual Studio 2019,请转到 Visual Studio 下载页免费安装。
如果尚未安装 Visual Studio,请转到 Visual Studio 下载页免费安装。
解决方案和项目
在 Visual Studio 中,解决方案不是“答案”。 解决方案仅仅是 Visual Studio 用来组织一个或多个相关项目的容器。 打开某个解决方案时,Visual Studio 会自动加载该解决方案包含的所有项目。
创建解决方案
首先创建一个空解决方案,以此来开始探索。 对 Visual Studio 有一定了解后,可能就不会经常创建空解决方案。 创建新项目时,Visual Studio 会自动为该项目创建一个解决方案,除非已经打开了一个解决方案。
打开 Visual Studio。
在“开始”窗口中,选择“创建新项目”。
在“创建新项目”页上,在搜索框中输入“空白解决方案”,选择“空白解决方案”模板,然后选择“下一步” 。
提示
如果你安装了多个工作负载,那么“空白解决方案”模板可能不会出现在搜索结果列表的顶部。 尝试滚动到列表的“基于你搜索的其他结果”部分。 它应该出现在那里。
将解决方案命名为“QuickSolution”,然后选择“创建” 。
解决方案将显示在 Visual Studio 窗口右侧的解决方案资源管理器中 。 你可能会经常使用“解决方案资源管理器”来浏览项目的内容 。
打开 Visual Studio,然后在“开始”窗口上,选择“创建新项目”。
在“创建新项目”页面上的搜索框中键入“空白解决方案”,选择“空白解决方案”模板,然后选择“下一步” 。
提示
如果你安装了多个工作负载,那么“空白解决方案”模板可能不会出现在搜索结果列表的顶部。 尝试滚动浏览“基于你搜索的其他结果”以查找模板。
在“配置新项目”页面上,将解决方案命名为 QuickSolution,然后选择“创建” 。
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# 项”,然后选择“代码” 。 在中间窗格中,选择“类”项模板。 在“名称”下,键入 Calendar,然后选择“添加”。
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 项目中的方法,因此需要将对 QuickDate 的引用添加到 QuickTest 项目 。 添加引用会在两个项目之间创建生成依赖关系,这意味着生成解决方案时,会先生成 QuickDate,再生成 QuickTest 。
选择 QuickTest 项目中的“依赖项”节点,然后在右键菜单或上下文菜单中选择“添加项目引用” 。
打开“引用管理器”对话框。
在左侧窗格中,展开“项目”,然后选择“解决方案” 。 在中间窗格中,选择“QuickDate”旁的复选框,然后选择“确定” 。
已添加对“QuickDate”项目的引用。
在“解决方案资源管理器”中,右键单击 QuickTest 项目的“引用”节点,然后从上下文菜单中选择“添加引用” 。
在“引用管理器”对话框中,选择“项目”。 在中间窗格中,选择“QuickDate”旁的复选框,然后选择“确定” 。
对 QuickDate 项目的引用随即出现在“解决方案资源管理器”中的 QuickTest 项目下 。
添加测试代码
现在,将测试代码添加到 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 代码应类似于如下屏幕截图:
运行单元测试
要检查单元测试是否正常工作,请从菜单栏中依次选择“测试”>“运行所有测试” 。 “测试资源管理器”窗口随即打开,你应该会看到 TestGetCurrentDate 测试通过 。
提示
还可以在菜单栏中选择“测试”>“测试资源管理器”,以打开“测试资源管理器”。
项目属性
包含 InternalsVisibleToAttribute 属性的 Calendar.cs 文件中的行引用 QuickTest 项目的程序集名称或文件名。 程序集名称可能不会始终与项目名称相同。 要查找项目的程序集名称,请使用项目属性。 属性页包含项目的各种设置。
在“解决方案资源管理器”中,右键单击 QuickTest 项目,然后选择“属性”,或者选择该项目,然后按 Alt+Enter 。
项目的属性页打开到“应用程序”选项卡。QuickTest 项目的程序集名称确实是 QuickTest 。
如果需要,可以在此处更改该名称。 随后,在生成测试项目时,生成的二进制文件的名称将从 QuickTest.dll 更改为 <NewName>.dll。
了解项目属性页的其他选项卡,例如“生成”和“调试”。 这些选项卡对不同类型的项目是不同的。