我在Visual Studio 2012中的解决方案有三个项目。一个WinForms项目和两个VC ++项目(Libraries)。最初所有的开发都是在Windows 7 Professional 32 Bit上完成的。但最近,我的系统更新为Windows 7 Professional 64 Bit。
我的应用程序使用设置为AnyCPU的Active Solution Platform成功构建并运行。但是当应用程序启动并执行一些调用底层VC ++库的操作时,应用程序会因为FileNotFoundException
而崩溃。
我应该将Active Solution Platform更改为x64吗?或者保持原样可以。
我尝试将Active Solution Platform更改为x64。但是dll并没有构建。我得到error LNK2019: unresolved external symbol
我之前从未使用过64位。我该怎么做才能构建我的应用程序?
第三个VC ++项目中存在未找到的符号,这是一个静态库。
WinForms依赖于dll,而dll依赖于静态库。
更新
当Build Configuration设置为AnyCPU时,我得到System.BadImageFormatException
。根据其他信息,它表示无法加载文件或程序集dll_name,....
。尝试加载格式不正确的程序。
答案 0 :(得分:2)
AnyCPU平台选择构建独立于CPU的.NET代码。这意味着它将在32位Windows上作为x86代码运行,但在64位Windows上作为x64代码运行。
Visual C ++与AnyCPU没有任何等价物。这些项目必须是32位或64位。据推测,您的解决方案配置为在选择AnyCPU时将它们构建为32位DLL。这意味着在64位计算机上,.NET代码将以64位运行,但DLL仍将是32位,并且由于64位进程无法加载32位DLL,它不会工作。
您可以通过将Active Solution Platform设置为x64或将其设置为x86来修复此 。除非您有特定原因要求代码以x64格式运行(例如,它需要更大的地址空间,或者在32位平台上运行不佳),选择x86通常更简单,因为这样可行在32位和64位Windows上,并且不需要对最初为32位Windows开发的现有代码进行任何修改。
也可以在单个解决方案中构建32位和64位DLL,并在运行时以适当的方式加载.NET代码。但是,这更复杂。