Could not load file or assembly TraceWrapper

最近在做一个基于SCVMM的Portal,搭环境的时候遇到一个挺诡异的事情。在我的Windows Server 2008 R2的开发机器上,如果用正常的方式启动portal,一切正常,但是如果通过VS2010 F5 debug模式起Portal的话,总是得到下面错误。

Could not load file or assembly ‘TraceWrapper, Version=1.0.523.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. An attempt was made to load a program with an incorrect format.

咨询了一下Oliver同学,An attempt was made to load a program with an incorrect format的错误一般出现于64位的系统上加载32位文件,或者32位系统加载64位文件。这个问题只出现于Native dll,因为DotNet的managed dll是平台无关的。个么问题来了,我的机器是64位OS,加载的TraceWrapper.dll也是64位的,怎么还报错呢?原来事情是这样的,VS2010是个32位程序,从而由它起来的所有进程都是32位的,有图为证。在这种情况下,所有的进程都运行于32位模式,或者说WOW64模式,在这种模式下去读取64位TraceWrapper.dll就自然出现上述错误了。

image

所以解决方法是,把引用TraceWrapper.dll的project,根据你运行的环境,用对应的CPU选项编译。

2 thoughts on “Could not load file or assembly TraceWrapper”

Leave a Reply

Your email address will not be published. Required fields are marked *