天天看點

resx檔案在X64位編譯,提示“未能加載檔案或程式集”的問題?

resx檔案在X64位編譯,提示“未能加載檔案或程式集”的問題?

解答:

錯誤現象如下

此問題最多在VS2010或者(SP1)上出現過,屬于VS2010的缺陷,估計在VS更高的版本不會出現此問題。

通常提示:

<dataname="imageCollection1.ImageStream" type="xxxxxx"mimetype="application/x-microsoft.net.object.bytearray.base64">

    <value>

       AAEAAAD/////AQAAAAAAAAAMAg...

</value>

  </data>

application/x-microsoft.net.object.bytearray.base64就是問題所在。

就算你設定解決方案AnyCPU,有時也解決不了問題。

錯誤原因:VS2010設計上特别是資源編譯器僅僅32位(很悲哀)。

解決方案:

方法一:幹脆使用代碼設定資源,不使用資源編輯器。這個可能是一個愚蠢的主意,然而也是不錯的主意,但是能夠解決問題。不過特别注意,如果采用X64位的作業系統,預設都是按照64位編譯,如果使用32位的就是32位的,分發的時候如果是前者,需要使用.NET 2.0 SP2更新檔,因為這個是.NET的BUG。否則使用.NET

2.0 SP1就行了。主要是針對WINDOWS XP的,如果是客戶的系統都是WINDOWS VISITA以上系統,不會存在此問題。

方法二:你使用添加引用裝配集合全部是X64位的庫,最後分發采用X86的動态庫,編譯通過。雖然不同,測試但是不影響結果。

                主程式使用X86的庫,其他的庫都是用X64位的庫,保證通過,而主程式保證真正的引用。

方法三:應用庫的時候采用反射的方式加載X64位的庫。開發的時候不引用X64的庫,這個方法不好。

(我的項目适合,考慮你的架構。,但是你的不一定)。

方法四:更新VS2010,微軟說就是他的問題,據說在VS2012以上的版本視乎解決了,需要分發.NET 2.0 SP2更新檔。這個是微軟的.NET 2.0的BUG;

方法五:你可以使用ResxFix更新檔,修複此問題。下載下傳位址如下:https://github.com/npaulo/ResxFix

我的項目一般采用方法二,和方法三。