[ASP.NET]內嵌資源的程式碼在Release發行時也要複製

最近將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)組態發行來測很重要。

 

 

參考:

VirtualPathProvider 類別

Visual Studio Debug VS Release mode