將 Reporting Services 的 Client Report 從.NET 3.5升級到.NET 4.0 時,在佈署時的注意事項

  • 2201
  • 0

將 Reporting Services 的 Client Report 從.NET 3.5升級到.NET 4.0 時,在佈署時的注意事項

這個問題其實是我自己的疏忽,由於手上有許多從 .NET 2.0 移轉至 .NET 3.5 或 .NET 4.0 的案子,移轉時通常不會有太大的問題,因為在開發環境,IDE工具會自動的幫您維護 web.config 檔案,而在佈署至正式環境時,由於通常我們無法直接覆蓋正是環境的 web.config 檔案,所以我們往往必須重組一個目標 .NET Framework 然後是 for 正式環境使用的 web.config 檔。而本次我所不小心疏漏的是,我的專案裡有使用到 Reporting Services 2005 的 Client Report,他會使用到 8.0 的 Microsoft.ReportViewer.WebForms.dll ,當我使用 Visual Studio 2010 將專案升級到 .NET 4.0 後,則他必須改參考 10.0版的 Microsoft.ReportViewer.WebForms.dll ,於是我另外包了一個封裝檔,將 Microsoft.ReportViewer.WebForms.dll  封裝起來,以便佈署至正式環境。

如下:

image

由於我希望他直接參照 GAC,所以我直接將 DLL 設定在 [全域組件快取資料夾] 中,一切轉備就緒,便將程式直接安裝、佈署志正是環境中。不過安裝完成之後,所有功能都正常,但是只要使用到與 Report 有關的功能,均會出現如下錯誤訊息:

image

錯誤中很明顯的告知在不同版本間的 Microsoft.ReportViewer.WebForms.dll 中,都有 Microsoft.ReportViewer.WebForms.ReportDataSource 這個型別,乍看之下,以為怎麼在 GAC 裡還無法區別正確的版本?如果你想要做一件傻事,就是去將 GAC 裡舊的版本移除,系統也會告訴你如法解除安裝,當然,這是個錯誤示範 XD,如下:

image

這時我看了一下我在 Visual Studio 2010 參照的 Microsoft.ReportViewer.WebForms.dll 這個檔案,如下:

image

這時,我突然間恍然大悟,其實根本就是在 web.config 裡我忘了指定正確的 10.0 版,如下:

image

由於並未告知 .NET 的 Runtime 需要載入執行的為 10.0 的版本,然後又在 web.config 中設定了 8.0 版本,可是 .NET CLR 本身就有一種機制,會自動 Check 是否最新的版本,因為他發現有另一個新的版本中也有 Microsoft.ReportViewer.WebForms.ReportDataSource 這個型別而引發這樣的錯誤訊息。

雖然這是一個相當烏龍的錯誤,但有時就是在發生後才又讓人回想起一些快要被我自己遺忘掉的一些底層的運作機制,特此在簡單的做個紀錄。也許剛好有需要的人可以做個參考。


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^