.net 2.0較之於.net 1.1的一個改進就是開發web程式時沒有了bin目錄,對類庫的引用自動放在web.config檔案中。好處就是不用像以前那樣顯式地在bin目錄下添加相關的dll檔案,給開發的過程帶來了便利,正由於這個,也導致了部署本地開發好的web程式到伺服器的時候產生一些問題。是不是發現在本地運行一切正常的程式發布到伺服器的時候不工作了,很有可能就是你在web程式中引用了.net 架構類庫之外的第三方類庫。
因此,無論你用xcopy方式、vs下的先行編譯方式、複製方式還是命令列模式下的aspnet_compiler編譯方式來發布到遠程伺服器,在這之前你還得像.net1.1那樣在你的web程式根目錄下添加bin檔案夾,並且將所有在你的網站中用到的第三方類庫都放到該目錄下。查看web.config檔案能清楚的知道在你的程式中用到了哪些第三方類庫。看下面的程式碼片段:
1<assemblies>
2 <add assembly="DevExpress.Web.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
3 <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
4 <add assembly="DevExpress.Data.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
5 <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
6 <add assembly="DevExpress.Web.ASPxGridView.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
7 <add assembly="DevExpress.Web.ASPxEditors.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
8 <add assembly="DevExpress.Web.ASPxSpellChecker.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
9 <add assembly="DevExpress.Web.ASPxTreeList.v8.3, Version=8.3.6.0, Culture=neutral, PublicKeyToken=5377C8E3B72B4073"/>
10</assemblies>
第2、4、6、7、8、9行所引用的就是非.net2.0基礎類庫,因此需要將這幾條所對應的dll檔案複製到bin目錄下,是不是這樣就算完了?未必,看web.config中的下面代碼:
<httpHandlers>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
這段代碼是用到asp.net ajax控制項時產生的,如果你裝了Atalas就知道。因此也必須把System.Web.Extensions.dll複製到bin目錄。當然,可能在你的程式並沒有用到ajax.net控制項,也就不必如此了,只是說需要處理所有類似的問題。
當所有必須的dll檔案都複製到bin目錄下時,離成功部署也就不遠了,其他動作按部就班就可以了。
PS:有時候在網站開發的過程中就想測試在遠程伺服器的可行性,不過這對大多數程式員來說並不現實也不靈活(但很可靠)。鑒於此,推薦用虛擬機器測試,虛擬機器平台為wmware workstation。在虛擬機器上安裝伺服器作業系統,如windows server 2000或2003(winxp也可以)安裝好IIS和Framework2.0就可以測試了。有關虛擬機器的更多介紹google一下就有了,有什麼問題也可以和我交流。
下篇隨筆預告:Dxperience本地化方法,本人已成功實現了漢化並部署。