C#一个解决方案下多个项目如何跨项目页面跳转

##前言
这个题目有点不太合适。总之,如果你在做一个C#的WebForm项目,项目有点大,于是你在一个解决方案里面建立很多项目,这样便于多人协作开发,同时也能根据项目生成多个dll,便于编译及发布。但是这样子就可能遇到以下问题:

项目A的页面Page1如何跳转到项目B的页面Page2?

项目A的页面Page1如何引用项目B的母版页?

多个项目如何共用一个web.config?

如何使dll生成到同一个目录下?

这篇博客就是为了解决以上问题。

闲话不多说,我们开始吧。

##正文

这里我们就从头开始,构造一个符合我们要求的解决方案。

首先打开我们的VS,新建一个解决方案TestSolution,路径如图所示

C#一个解决方案下多个项目如何跨项目页面跳转_第1张图片

接下来,在该解决方案中新建一个项目 MainProject,在MainProject中新建一个web窗体MainPage1.aspx , 新建一个母版页MainMasterPage.Master

这时候,[VS解决方案资源管理器] 与[解决方案文件夹] 如图所示:

C#一个解决方案下多个项目如何跨项目页面跳转_第2张图片

同时,MainProject的项目文件夹如下图:

C#一个解决方案下多个项目如何跨项目页面跳转_第3张图片

接下来就是重点了。

接下来就是重点了。

接下来就是重点了。

我们在MainProject里面添加一个文件夹Module1:

C#一个解决方案下多个项目如何跨项目页面跳转_第4张图片

在 [VS解决方案资源管理器] 中,右键[解决方案],选择添加[新建解决方案文件夹],名为0_Module1, 这时候让我们看一下目录里的情况:

C#一个解决方案下多个项目如何跨项目页面跳转_第5张图片

这里可以看到,对应目录下,并未产生一个名为0_Module1的文件夹。

这里我们得出了第一个结论:

VS解决方案资源管理器 并不是简单的显示目录结构。

在一个解决方案中,新建解决方案文件夹 是一个虚拟目录,是不存在的。

然后我们要做什么呢?

右键0_Module1,添加一个项目Module1.Project1 ,这里仔细看该项目的路径:

C#一个解决方案下多个项目如何跨项目页面跳转_第6张图片

看到了吗,这里是一个技巧,该路径不要用默认的TestSolution下,而是把他放到了TestSolution/MainProject/Module1下了。

目前的文件夹状况如下图:

C#一个解决方案下多个项目如何跨项目页面跳转_第7张图片

看到这里,对于文章开头提出的问题,相信有很多读者已经有了想法与感悟,那么我们接下来加快节奏,各位小伙伴系好安全带。

将MainProject下的Module1 从项目中排除(右键->从项目中排除)。

右键 0_Module1,添加项目Module1.Project2,选路径时要注意,依旧不要用默认的路径,而是将它改为TestSolution/MainProject/Module1 。

在 Module1.Project1 中添加一个web窗体 Project1.Page1.aspx .
在 Module1.Project2 中添加一个web窗体 Project2.Page1.aspx .

这时候, [VS解决方案资源管理器] 及 文件夹路径 如下:

C#一个解决方案下多个项目如何跨项目页面跳转_第8张图片

在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文件夹。

右键解决方案,选择生成解决方案

C#一个解决方案下多个项目如何跨项目页面跳转_第9张图片

可以看到所有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】

最后画个图表示一下这三个项目的关系:

C#一个解决方案下多个项目如何跨项目页面跳转_第10张图片

###在此感谢小乐的讲解

你可能感兴趣的:(ASP.NET)