一个不是很常见的.Net Interop问题

这两天被一个.Net Interop的问题困扰着,之前没有问题的代码,突然出现了如下的错误:

Could not load file or assembly 'Interop.SterlingLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

这个提示似乎看不出有用的信息,只好逐步排除了:

1 检查编译输出文件,都在

2 检查svn log,没有发现错误的修改提交

3 回滚版本。我机器上有前几天编译的binary,发现可以用,于是对不同日期的Interop.SterlingLib.dll进行hex比较,发现不一样。这个就很奇怪了,因为COM typelib没有变化,工程设置都是Any CPU,所以不应该有差异。

4 GOOG之,发现如下解释:

Tip of the day: "An attempt was made to load a program with an incorrect format" .NET P/INVOKE issue

于是将工程切换到x86,运行正常。

 

疑点:Sterling确实是x86的,为了避免Interop问题将我的工程设置成x86自然是应该的。但是,前天同样的操作系统(Win7 x64),同样的工程设置(Any CPU)为什么能用呢?太诡异了……C#是方便,但是这些诡异的问题真要命啊。

posted @ 2014-12-31 23:13  Skogkatt  阅读(266)  评论(0编辑  收藏  举报