##前言
这个题目有点不太合适。总之,如果你在做一个C#的WebForm项目,项目有点大,于是你在一个解决方案里面建立很多项目,这样便于多人协作开发,同时也能根据项目生成多个dll,便于编译及发布。但是这样子就可能遇到以下问题:
项目A的页面Page1如何跳转到项目B的页面Page2?
项目A的页面Page1如何引用项目B的母版页?
多个项目如何共用一个web.config?
如何使dll生成到同一个目录下?
这篇博客就是为了解决以上问题。
闲话不多说,我们开始吧。
##正文
这里我们就从头开始,构造一个符合我们要求的解决方案。
首先打开我们的VS,新建一个解决方案TestSolution,路径如图所示
接下来,在该解决方案中新建一个项目 MainProject,在MainProject中新建一个web窗体MainPage1.aspx , 新建一个母版页MainMasterPage.Master
这时候,[VS解决方案资源管理器] 与[解决方案文件夹] 如图所示:
同时,MainProject的项目文件夹如下图:
接下来就是重点了。
接下来就是重点了。
接下来就是重点了。
我们在MainProject里面添加一个文件夹Module1:
在 [VS解决方案资源管理器] 中,右键[解决方案],选择添加[新建解决方案文件夹],名为0_Module1, 这时候让我们看一下目录里的情况:
这里可以看到,对应目录下,并未产生一个名为0_Module1的文件夹。
这里我们得出了第一个结论:
VS解决方案资源管理器 并不是简单的显示目录结构。
在一个解决方案中,新建解决方案文件夹 是一个虚拟目录,是不存在的。
然后我们要做什么呢?
右键0_Module1,添加一个项目Module1.Project1 ,这里仔细看该项目的路径:
看到了吗,这里是一个技巧,该路径不要用默认的TestSolution下,而是把他放到了TestSolution/MainProject/Module1下了。
目前的文件夹状况如下图:
看到这里,对于文章开头提出的问题,相信有很多读者已经有了想法与感悟,那么我们接下来加快节奏,各位小伙伴系好安全带。
将MainProject下的Module1 从项目中排除(右键->从项目中排除)。
右键 0_Module1,添加项目Module1.Project2,选路径时要注意,依旧不要用默认的路径,而是将它改为TestSolution/MainProject/Module1 。
在 Module1.Project1 中添加一个web窗体 Project1.Page1.aspx .
在 Module1.Project2 中添加一个web窗体 Project2.Page1.aspx .
这时候, [VS解决方案资源管理器] 及 文件夹路径 如下:
在MainPage1.aspx中添加如下代码
MainPage1
在Project1.Page1.aspx中添加如下代码
Project1.Page1
在Project2.Page1.aspx中添加如下代码
Project2.Page1
设置MainProject为启动项目,设置MainPage1.aspx为启动页。
将 Module1.Project1 和 Module1.Project2 的 web.config删除
将 Module1.Project1 和 Module1.Project2 的 [属性]-> [生成]->[输出路径] 改为[ …\bin\ ] ,即MainProject的bin文件夹。
右键解决方案,选择生成解决方案
可以看到所有dll都生成在MainProject的bin文件夹下
启动调试。
可以发现,3个项目的页面可以互相跳转了。
母版页也可以引用了,这里就不演示了,还请读者自行测试。
##分析
来简单分析一下,我们是如何达到我们的目的的呢?
这三个项目的关系是什么?
首先我们要明确,[VS解决方案资源管理器] 显示的并不是目录,而是记录在sln文件里的解决方案的资源项。这里为了区分Module1这个文件,便于新手理解,我们的 虚拟目录 取名为 0_Module1.
该虚拟目录文件夹名也可以是Module1,这样的话,虚拟解决方案文件夹与MainProject下的文件夹名称相同,虽然不便于新手理解,但是便于查找某个项目的文件。
页面文件中a标签跳转路径采用了相对路径。 " / " 一个斜杠,表示根目录,这个根目录是相对于域名的根目录,也就是相对于MainProject的根目录。这里页面的跨项目跳转,其实并不是真正的跨项目跳转,而是Project1本来就是MainProject的一部分,因为Project1就在MainProject文件夹里的Module1文件夹里面啊。
该解决方案可以在博主的资源页下载https://download.csdn.net/download/wf824284257/10820639 ,文件名为【解决方案下多个项目处理措施.rar】
最后画个图表示一下这三个项目的关系:
###在此感谢小乐的讲解