如何在Visual Studio中构建示例代码,从类或教程拆分为存储库中的文件夹?
所以 - 我几乎是 C# 的菜鸟,我浏览了很多教程,浏览了一些大型 C# 项目并构建了它们,并做了一些其他小事情。我正在学习一门关于在Pluralsight上编写可测试代码的课程。他有一个用于代码示例的公共 Github 存储库,编写可测试代码。 我连接到存储库并将其下载到本地 Git 存储库中。我能够从NuGet下载所有软件包,它们都显示为他使用的版本(有些有更新,但我认为更新可能会破坏事情)。
我不知道如何运行此代码,构建它或运行其中的测试。
到目前为止我尝试过什么
我的问题是 - 我打开解决方案,有一堆文件和文件夹 - 每个模块/章节都被分成文件夹(即模块 1/简单、模块 1/困难、模块 2/简单等)。我想构建 Module1/Easy 文件夹,包括单元测试示例,并运行测试。
在查看 Module1/Easy 时,它有 3 个应该可以构建的文件 - 该程序.cs有一个 main() 并且看起来像一个控制台应用程序,计算器.cs有一个简单的类,计算器测试.cs 具有为 Nunit 构建的单元测试。该解决方案有NUnit,Castle.core和后来模块(Moq,AutoMoq,Unity,Ninject等)的东西。它似乎没有 VS 运行器,所以我添加了 Nunit3TestAdapter - 课程中的那个人安装了 resharper,我没有,他正在使用 Resharper 测试运行器,这可以解释为什么他没有包含它。
我尝试将"Module1/Easy/Project.cs"文件设置为"设置为启动项",因为它有一个主文件,并且看起来设置为控制台应用程序。 但是,运行它("开始"按钮变成"程序.cs"按钮),它失败说它无法运行 dll。这些测试不像我从示例中构建的其他一些小项目那样显示在测试资源管理器中。
正确的方法是什么?
我不知道从这里去哪里。在"构建"菜单上只有一个"构建解决方案"和一个关于代码分析的 - 我已经习惯了这里的更多选项。 感觉我必须把这个文件夹变成一个项目,也许? 我可以随时重新安装软件包 - 但是这里最好的解决方案是什么?
我之前在其他书籍、教程或类存储库中遇到过这个问题,但最终决定弄清楚如何让这个工作。我感谢任何帮助!
笔记
- 我目前正在运行Visual Studio Community 2017。
- 我可以发布一些文件,但存储库是公开可用的,并且不确定确切地发布什么来提供帮助。
评论和答案的进度
- 根据 Biker-Dude 的回答,我将项目切换为构建控制台应用程序而不是 dll,现在我收到一个编译时错误,因为有多个入口点(即每个模块和子文件夹都有自己的 Main() 函数,可能应该是一个单独的项目)。
- 在#1之后,我从解决方案中删除了除一个文件夹之外的所有文件夹,然后它将编译,运行测试等 - 但我最终希望能够至少单独编译每个子文件夹 - 最好的方法是什么?
问题一定是项目必须将输出类型设置为类库。浏览解决方案树,然后:
选择类的项目>右键单击">属性">"应用程序>输出类型>"控制台应用程序/Windows 应用程序"。
如果其他事情设置正确,这应该可以修复它。
在BikerDude的回答和stijn的评论的帮助下,我最终能够解决这个问题并让一些事情发挥作用。
首先,在这种情况下不要尝试排除任何文件夹,这只会让事情变得更糟! 它们仍将位于您的基础文件夹/存储库中,只是不会显示在您的解决方案中的任何位置,并且您将无法创建具有相同名称的新文件夹(奇怪的决定......而且您必须将它们作为单独的文件重新添加 - 我认为。
最佳解决方案(到目前为止)
最好的解决方案似乎是:
-
为解决方案中的每个可生成文件集创建一个新项目(在我的例子中,每个"模块"文件夹至少创建一个项目)。我使用了".Net 框架控制台应用程序"项目类型(右键单击解决方案,使用添加/新建项目)来使事情正常工作,但这取决于您下载的特定课程或教程存储库。
-
将包含要生成的文件的文件夹或子文件夹从主解决方案中移动到新项目中 - 可以单击并拖动以移动它。
-
Visual Studio 将在项目中创建一个空的、预先格式化的文件,你可能必须删除该文件 - 对于 .Net 应用程序,这是 C# 中的"程序.cs"文件。 对于我的一个文件夹,这个文件已经存在,我必须删除新文件才能构建。 来自不同模块的另一个文件夹设置得更像是一个库,不能独立构建,但这个过程确实让我能够构建文件,并允许单元测试显示在测试资源管理器中并成功运行测试(这是该模块的要点)。
-
转到解决方案,右键单击并选择"管理解决方案的 Nuget 包"。只要为主解决方案安装了所有软件包,那么它们就会全部显示在已安装软件包列表中(您可能需要单击"已安装"选项卡)。您可以依次单击每个包,然后在右侧选中新项目,并且"安装"按钮应该可用 - 单击它。 对所有软件包重复此操作以安装所有软件包。 请注意,如果您首先创建所需的所有项目,则可以在此处减少一些重复,然后您可以在此步骤中同时安装所有项目(即一次选中所有新项目,而不是每次都重新打开包管理器)。
-
您可能需要修复命名空间 - 它应该在您从原始解决方案传输的文件/文件夹中保持一致,但是如果您添加任何新文件来处理东西,它的命名空间可能不匹配,并且要查看原始文件中的类等,您必须更新新文件上的命名空间。
-
根据BikerDude的回答 - 将所有内容转移到新项目后,如果您在解决方案附带的原始项目中保留任何内容,则可能没有尝试构建正确类型的项。 您可以通过右键单击项目、选择属性并调整"输出类型"来解决此问题,但它可能没有您需要的选项。 如果没有,只需创建一个具有正确类型的新项目并按上述方式传输文件即可。
按照上述步骤操作后,我能够使用我移动的文件夹中的原始文件构建我创建的每个新项目。 主要是我只需要构建,它启用了本教程/类关注的所有单元测试,但这允许我构建控制台应用程序(如果存在)。
感谢大家的帮助,为我指明了正确的方向!