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
我的项目一般采用方法二,和方法三。