最近將Web專案內的內容網頁(aspx、ascx)分享給其他Web專案,為方便版本管理及協同作業,
這次使用虛擬目錄(VirtualPathProvider)來將內容網頁以串流方式讓其他專案引用,測試時都運作正常(哈!通常都是),
就當原本Web專案發行組態從偵錯(Debug)改成發行(Release)組態時,網頁發生缺少主版網頁的錯誤,筆記解法。
VirtualPathProvider:
- 把.aspx、ascx透過內嵌資源提供給Web應用程式使用,簡單的描述:你可以把A網站的主版頁面或是使用者控制項的網頁UI部分以串流方式讓B網站專案引用。
- Save as Link(加入做為連結)的替代選擇。
1.原本網站專案中,為了使用虛擬目錄功能,會將主版頁面Bank.Master屬性中的建置動作從內容(Content)改為內嵌資源(embedded Resource)。
- .aspx的預設建置動作是為內容(Content)
- .cs的設計建置動作是編譯)。
2.但A網站進行Release發行時,因為主版頁面是內嵌資源,複製到輸出目錄中一律複製會把Bank.master複製到bin目錄下而非原本Master Page所在的目錄。
而這導致了原本內容網頁(Content Page)找不到主版頁面(Master Page),把MasterPageFile URL改描Bin目錄好像也怪怪的。
3.目前解決辦法是用Notepad打開網站專案的專案檔.csproj,在描述頁面的區塊再加上<Content Include="Master\Bank.Master" />
標明這個頁面既是內嵌資源(EmbeddedResource)也是內容(Content)。類似向下面這樣:
<Content Include="Master\Bank.Master" />
<EmbeddedResource Include="Master\Bank.Master">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
這樣Release發行時就會一起帶出門了,打開了程式碼屬性的建置動作只有一種選擇的限制。
小結:
- 雖然有佈署到測試機跑測試,但先用發行(Release)組態發行來測很重要。
參考:
Visual Studio Debug VS Release mode