我只是想构建一个现有程序的64位版本(带有一些依赖DLL的EXE)。由于它在Linux下非常容易(只需重新编译),我乐观地认为它在Windows下可能类似。不幸的是,它不是。。。
启动我新编译的EXE后,我收到一条错误消息
The application has failed to start because its side-by-side configuration is incorrect...
为了找出原因,我做了一个SxS跟踪,显示了以下错误消息:
ERROR: Two assemblies have the same assembly name with different version.
Assembly 1: C:WindowsWinSxSmanifestsamd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_fa396087175ac9ac.manifest.
Assembly 2: INFO: Manifest found at C:WindowsWinSxSmanifestsamd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_fa396087175ac9ac.manifest..
所以。。这是什么意思?我该如何解决这个问题?安装x64的VS2010可再发行包不是诀窍,这里安装程序抱怨已经安装了一个新版本。。。
清单文件提到一些X86…这是原因吗?如果是:我怎么才能知道它仍然依赖于哪些X(&DLL)?
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="0.64.1.0" processorArchitecture="x86" name="Controls" type="win32"> </assemblyIdentity>
<description>wxWindows application</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
您的应用程序清单指定了x86
体系结构,并且有两个comctl32
条目。
您应该为32位构建指定x86
,为64位构建指定amd64
。你应该只列出一次comctl32
。对于依赖的程序集体系结构,如果您愿意,可以指定*
,但就我个人而言,我更喜欢显式。