在普通檔案夾下部署ASP.NET程式的方法
問題描述:
一個asp.net的web程式(路徑為d:\proj\WebTest),如果使用一個虛擬目錄(例如:virtualapp)指向它(d:\proj\WebTest),通過http://localhost/virtualapp/index.aspx可以正常訪問。但是如果把web程式下移到另外一個檔案夾中(d:\proj\WebTest\abc),
http://localhost/virtualapp/abc/index.aspx,則不能正常訪問。出現以下錯誤提示。
“/virtualapp”應用程式中的伺服器錯誤。
--------------------------------------------------------------------------------
配置錯誤
說明: 在處理向該請求提供服務所需的設定檔時出錯。請檢查下面的特定錯誤詳細資料並適當地修改設定檔。
分析器錯誤資訊: 在應用程式層級以外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的。導致該錯誤的原因可能是在 IIS 中沒有將虛擬目錄作為應用程式進行配置。
源錯誤:
行 23: “Forms”、“Passport”和“None”
行 24: -->
行 25: <authenticationmode="Windows" />
行 26:
行 27:
源檔案:E:\aspnet\WebApplicationCSharp\web.config 行: 25
如果在web.config檔案把<authenticationmode="Windows" />注釋掉,則又提示web程式編譯之後產生的dll檔案找不到(CodeFile方式)或相應的頁面代碼檔案不能讀入(CodeBehind方式)的錯誤。
難道asp.net程式就必須部署到虛擬目錄中嗎?如果是購買的服務空間,空間服務商又不放開多個虛擬目錄,那在一個網站上該如何部署多個應用呢?
發生原因:
虛擬目錄的實質就是“應用程式定義域”。應用程式在執行的時候,會到執行目錄下的bin目錄中去尋找執行代碼。由於bin目錄在d:\proj\WebTest\abc目錄下,而應用程式的執行目錄是d:\proj\WebTest,所以才會出現dll找不到的錯誤。
解決辦法:
把應用的bin目錄移動到應用程式的執行目錄中,如果是多個web應用則需要注意dll檔案的命名衝突問題。具體到該問題,就是把d:\proj\WebTest\abc目錄下的bin目錄複寫到d:\proj\WebTest目錄下,問題即可解決。