Asp.net

更新生產 ASP.NET 網站 bin 文件夾中的 DLL

  • March 31, 2010

我想更新生產 Web 應用程序中的類庫(單個 DLL 文件)。此 Web 應用程序已預編譯(已發布)。我在 StackOverflow 上閱讀了一個答案(抱歉,似乎無法再找到它,因為搜尋功能不能很好地工作),這讓我相信我可以將新的 DLL 粘貼到 bin 文件夾中,它會被選中沒有問題(這會導致 WP 回收,這對我來說很好,因為我們不使用 InProc 會話狀態)。

但是,當我嘗試此操作時,我的網站崩潰並給出 FileLoadException 說程序集清單定義與程序集引用不匹配。這到底是什麼東西?!在 Visual Studio 中更新 DLL 並重新部署整個站點工作得很好,但它在後面是一個巨大的痛苦。如果您必須重新部署整個站點以實現任何更改,那麼擁有一個單獨的 DLL 有什麼意義?

問題是:如何在不破壞應用程序和重新部署所有文件的情況下更新生產網站上的 DLL?

要記住的是,就Visual Studio 和 ASPNET 而言,存在網站Web 應用程序。

網站通常會將所有 aspx 和 vb 文件發佈到實時伺服器,並且 ASPNET 工作程序每次在展示之前都會重新編譯應用程序。

另一端是 Web 應用程序,您的所有文件背後的程式碼都被編譯為單個 DLL 文件,您只需部署您的 aspx 頁面並將包含 DLL 文件的 bin 文件夾用於生產。

還有一個稱為“預編譯網站”的“混合”(請參閱官方 MSDN 概述的連結),其中您沒有 Web 應用程序的單個 DLL 佈局,但網站的所有編譯工作已完成你。根據您的需要,有幾種“模式”。

在我看來,您的錯誤是由於您的網站設置為具有某種預編譯的網站而引起的。使用預編譯模型更加“嚴格”,因為它假設某些文件/簽名已經到位。更新版本的 DLL 文件會導致中斷,因為預編譯需要文件的名稱和版本。

如果可能,最好的辦法是轉換為 Web 應用程序,因為您可以毫無問題地將額外的 DLL 添加到生產環境中。否則,請查看此矩陣以了解您的應用程序需要哪種形式的預編譯。

引用自:https://stackoverflow.com/questions/2554361