1. 程式人生 > >C#一個解決方案下多個專案如何跨專案頁面跳轉

C#一個解決方案下多個專案如何跨專案頁面跳轉

前言

這個題目有點不太合適。總之,如果你在做一個C#的WebForm專案,專案有點大,於是你在一個解決方案裡面建立很多專案,這樣便於多人協作開發,同時也能根據專案生成多個dll,便於編譯及釋出。但是這樣子就可能遇到以下問題:

專案A的頁面Page1如何跳轉到專案B的頁面Page2?

專案A的頁面Page1如何引用專案B的母版頁?

多個專案如何共用一個web.config?

如何使dll生成到同一個目錄下?

這篇部落格就是為了解決以上問題。

閒話不多說,我們開始吧。

正文

這裡我們就從頭開始,構造一個符合我們要求的解決方案。

首先開啟我們的VS,新建一個解決方案TestSolution,路徑如圖所示

########## pic 1

接下來,在該解決方案中新建一個專案 MainProject,在MainProject中新建一個web窗體MainPage1.aspx , 新建一個母版頁MainMasterPage.Master

這時候,[VS解決方案資源管理器] 與[解決方案資料夾] 如圖所示:

######### pic 2

同時,MainProject的專案資料夾如下圖:

########## pic 3

接下來就是重點了。

接下來就是重點了。

接下來就是重點了。

我們在MainProject裡面新增一個資料夾Module1:

########## pic 4

在 [VS解決方案資源管理器] 中,右鍵[解決方案],選擇新增[新建解決方案資料夾],名為0_Module1, 這時候讓我們看一下目錄裡的情況:

############ pic 5

這裡可以看到,對應目錄下,並未產生一個名為0_Module1的資料夾。

這裡我們得出了第一個結論:

VS解決方案資源管理器 並不是簡單的顯示目錄結構。

在一個解決方案中,新建解決方案資料夾 是一個虛擬目錄,是不存在的。

然後我們要做什麼呢?

右鍵0_Module1,新增一個專案Module1.Project1 ,這裡仔細看該專案的路徑:

############## pic 6

看到了嗎,這裡是一個技巧,該路徑不要用預設的TestSolution下,而是把他放到了TestSolution/MainProject/Module1下了。

目前的資料夾狀況如下圖:

########### pic 7

看到這裡,對於文章開頭提出的問題,相信有很多讀者已經有了想法與感悟,那麼我們接下來加快節奏,各位小夥伴繫好安全帶。

將MainProject下的Module1 從專案中排除(右鍵->從專案中排除)。

右鍵 0_Module1,新增專案Module1.Project2,選路徑時要注意,依舊不要用預設的路徑,而是將它改為TestSolution/MainProject/Module1 。

在 Module1.Project1 中新增一個web窗體 Project1.Page1.aspx .
在 Module1.Project2 中新增一個web窗體 Project2.Page1.aspx .

這時候, [VS解決方案資源管理器] 及 資料夾路徑 如下:

############# pic 8

在MainPage1.aspx中新增如下程式碼

<p>MainPage1</p>
<div>
    <a href="/Module1/Module1.Project1/Project1.Page1.aspx">Goto Project1.Page1</a>
</div>

在Project1.Page1.aspx中新增如下程式碼

<p>Project1.Page1</p>
<div>
    <a href="/Module1/Module1.Project2/Project2.Page1.aspx">Goto Project2.Page1</a>
</div>

在Project2.Page1.aspx中新增如下程式碼

<p>Project2.Page1</p>
<div>
    <a href="/MainPage1.aspx">Goto MainPage1</a>
</div>

設定MainProject為啟動專案,設定MainPage1.aspx為啟動頁。

將 Module1.Project1 和 Module1.Project2 的 web.config刪除

將 Module1.Project1 和 Module1.Project2 的 [屬性]-> [生成]->[輸出路徑] 改為[ ….\bin\ ] ,即MainProject的bin資料夾。

右鍵解決方案,選擇生成解決方案

############## pic 9

可以看到所有dll都生成在MainProject的bin資料夾下

啟動除錯。

可以發現,3個專案的頁面可以互相跳轉了。

母版頁也可以引用了,這裡就不演示了,還請讀者自行測試。

分析

來簡單分析一下,我們是如何達到我們的目的的呢?

這三個專案的關係是什麼?

首先我們要明確,[VS解決方案資源管理器] 顯示的並不是目錄,而是記錄在sln檔案裡的解決方案的資源項。這裡為了區分Module1這個檔案,便於新手理解,我們的 虛擬目錄 取名為 0_Module1.

該虛擬目錄資料夾名也可以是Module1,這樣的話,虛擬解決方案資料夾與MainProject下的資料夾名稱相同,雖然不便於新手理解,但是便於查詢某個專案的檔案。

頁面檔案中a標籤跳轉路徑採用了相對路徑。 ” / ” 一個斜槓,表示根目錄,這個根目錄是相對於域名的根目錄,也就是相對於MainProject的根目錄。這裡頁面的跨專案跳轉,其實並不是真正的跨專案跳轉,而是Project1本來就是MainProject的一部分,因為Project1就在MainProject資料夾裡的Module1資料夾裡面啊。

最後畫個圖表示一下這三個專案的關係:

############ 10

在此感謝小樂的講解