2011-05-04 40 views
2

我最近重新組織了一個Web應用程序,以便所有文件都不在應用程序根目錄中,而是分成了業務區域子文件夾,按類型分爲多個文件夾。因此,而不是具有:ASP.Net用戶控件在子目錄中,找不到目錄錯誤

  • 〜/ MasterPage.master
  • 〜/ Page.aspx
  • 〜/ UserControl.ascx

結構是現在這個樣子:

  • 〜/ App/Common/MasterPages/MasterPage.master
  • 〜/ App/Common/Pages/Page.aspx
  • 〜/應用/通用/用戶控件/ UserControl.ascx

這一切都工作的很好我的機器上,一切都編譯並在調試運行或發佈模式,但是當我部署到測試服務器的事情走了梨梨形。部署我在Visual Studio中使用_deploy_msi項目創建一個MSI,然後在測試服務器上運行MSI。這是直接從.aspx引用

用戶控件似乎是美好的,但如果一個用戶控件有孩子的用戶控件,然後錯誤接踵而至:

目錄 「C:\的Inetpub \ wwwroot文件\ Web應用程序\ App \ Common \ MasterPages' 不存在。無法啓動 監控文件更改。

目錄 'C:\ Inetpub \ wwwroot \ WebApp \ App \ Common \ UserControls' 不存在。無法啓動 監控文件更改。

的目錄不測試服務器上存在,因爲沒有文件當中去,所有的內容在生成過程中編譯成的DLL,所以MSI沒有任何文件複製到他們。如果我手動創建目錄,那麼即使它們都是空的,一切都會開始工作,所以一個明顯的解決方法是在每個文件夾中包含一個blank.html或類似文件,以便它們由安裝程序創建;另一種方法是將用戶控件放在與頁面相同的目錄中 - 但這似乎都是在討論真正的問題:爲什麼部署的Web應用程序首先需要這些目錄存在?

因此,有我想回答幾個問題:

  • 這是一個根本性的錯誤爲首的做法,我可以期望看到因爲在這個項目目錄結構在未來進一步類似問題? (如果是這樣,有什麼更好的方式來組織應用程序?)
  • 有沒有一種方法來配置構建,使ASP.net不需要'開始監視文件更改'? (這是否與'編譯網站可更新選項?'
  • 是否有一些很好的文檔說明了所有這些工作如何解釋這個問題是什麼?
+0

什麼版本的ASP.NET,它是一個Web應用程序項目,是否正確? – IrishChieftain 2011-05-04 15:13:14

+0

@IrishChieftain .Net 3.5SP1,我該如何判斷?我有'建立網站'等選項,如果我右鍵點擊它。 – robertc 2011-05-04 15:16:51

+1

我在這篇博文中回過頭來:http://bit.ly/lUeISF ...先複製用戶控件,看看是否有效。如果失敗並且這是一個網站項目,那麼引用用戶控件時存在已知問題......如果是這種情況,最好轉換爲Web應用程序項目。 – IrishChieftain 2011-05-04 15:35:50

回答

1

儘管任何UserControl都會導致它,但無論頁面或其他UserControl是否使用它,我都有同樣的確切錯誤。我相信只有當這個控制在一次請求中被使用超過5次時纔會發生。

一個解決辦法是空的佔位符文件添加到含CustomControl每個目錄,並設置佔位符文件的屬性,以Build Action: ContentCopy to Output Directory: Copy always。這使得目錄在網站發佈時不會消失。