1.5 解决方案与项目的关系
当人们需要解决一个非常复杂的问题时,只有一个应用程序项目是不够的。比如一个庞大的ERP系统,需要多人一起协作开发,每人负责一个项目模块,完成后把所有的项目合并为一个解决方案来发布。
因此,一个解决方案至少包含一个项目(当然也可以使用空的解决方案,但是没有实际意义),复杂的解决方案包含多个项目。
举个简单的例子,图1-41所示是一个加法计算器,要解决的问题是计算两个输入整数的和。该解决方案划分为两个项目,AddCalLib是一个类库,负责完成计算功能,MyApp是一个Windows窗体应用程序,它负责与用户交互(接收用户输入,向用户展示处理结果)。其中,MyApp项目为主项目,因为类库项目最后会生成一个.dll文件,.dll文件不能直接执行。用户运行MyApp项目生成的.exe文件会调用AddCalLib项目生成的.dll文件,来处理两个整数的相加运算。加法计算器的用户界面如图1-42所示。
图1-41 加法计算器解决方案
图1-42 加法计算器的用户界面
这里涉及“主项目”的概念,也称“启动项目”(为了与Visual Studio中的叫法一致,后文皆用启动项目),即当运行整个解决方案时首先启动的项目。通常,作为启动项目的应用程序应该是可执行的,如.exe文件,如果一个解决方案中所有项目都是类库(编译为.dll文件),都不能独立运行,则该解决方案就需要被其他能够独立运行的应用程序调用。
Visual Studio会把当前解决方案中最先创建的项目定义为启动项目,如上面提到的加法计算器的例子,由于先创建MyApp项目再创建AddCalLib项目,因此MyApp成为该解决方案的启动项目。启动项目在“解决方案资源管理器”中显示为粗体(字体加粗)。
但是问题又来了,比如有一个X解决方案,里面包含了A、B、C三个项目,如图1-43所示。由于在创建时,先创建了B项目,再创建A项目,最后创建C项目,在默认情况下,B项目就成为X解决方案的启动项目了(粗体显示),然而我们的初衷是希望A项目作为启动项目的,因此需要进行调整。
选中解决方案节点,单击“解决方案资源管理器”窗口工具栏上的按钮(或者在解决方案节点上右击,从弹出的快捷菜单中选择【属性】,也可以按快捷键Alt + Enter)打开解决方案的属性设置窗口,从左边的导航列表中选择“通用属性”→“启动项目”,在窗口右侧区域选中“单启动项目”,并在列表框中选择A项目(如图1-44所示),最后单击窗口右下方的“确定”按钮保存。这时候A项目就成为启动项目了,项目名称会显示为粗体。
图1-43 X解决方案的结构
图1-44 设置启动项目