且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

resx文件在X64位编译,提示“未能加载文件或程序集”的问题?

更新时间:2022-10-03 15:15:43

原文: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

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