.net 将开发环境更改为64位Windows 7-应用程序崩溃

.net 将开发环境更改为64位Windows 7-应用程序崩溃,.net,frameworks,32bit-64bit,.net,Frameworks,32bit 64bit,我使用WindowsXP32位开发机器维护了一个最初在VisualStudio2005框架2.0中构建的应用程序 我的新开发机器是Windows7 64位 我将我的解决方案加载到VisualStudio2010中,并成功地转换了所有项目(实际应用程序使用了几个项目),并更新到Framework 4.0 在调试模式下,应用程序运行时不会出现问题 现在,它的工作方式是,只有一个安装程序曾经部署过。将更改部署到服务器。当应用程序在安装后运行时,它实际上会运行一个更新程序应用程序来检查对服务器的文件更改

我使用WindowsXP32位开发机器维护了一个最初在VisualStudio2005框架2.0中构建的应用程序

我的新开发机器是Windows7 64位

我将我的解决方案加载到VisualStudio2010中,并成功地转换了所有项目(实际应用程序使用了几个项目),并更新到Framework 4.0

在调试模式下,应用程序运行时不会出现问题

现在,它的工作方式是,只有一个安装程序曾经部署过。将更改部署到服务器。当应用程序在安装后运行时,它实际上会运行一个更新程序应用程序来检查对服务器的文件更改,如果发现任何更改,则下载这些更改,替换客户端上的原始文件,然后运行“真正的”应用程序

将在64位计算机上编译的第一个版本部署到服务器后,我运行安装的应用程序版本以测试它是否正常工作。更新程序似乎工作正常,但当它启动“真实”应用程序时,它崩溃了

在Windows 7上运行时,它会因以下原因崩溃:

出现故障的应用程序名称:ProviderDesktop.exe,版本:2.6.0.0,时间戳:0x4f4fad5e 故障模块名称:KERNELBASE.dll,版本:6.1.7600.16850,时间戳:0x4e211485 异常代码:0xe0434352 故障偏移量:0x0000b9bc 出错进程id:0x2388 故障应用程序启动时间:0x01ccf8971407b4fe 出现故障的应用程序路径:C:\Program Files(x86)\UHINt2.5\ProviderDesktop.exe 故障模块路径:C:\Windows\syswow64\KERNELBASE.dll 报告Id:53717437-648a-11e1-a455-8a2e36aa00e8

在XP上运行时,它会崩溃:

事件类型:clr20r3 P1:providerdesktop.exe P2:2.6.1.1
P3:4f4fad5e P4:providerdesktop P5:2.6.1.1 P6:4f4fad5e
P7:85d P8:0 P9:system.io.fileloadexception

在谷歌搜索这个问题之后,我已经做了2次诊断

首先,我尝试了Fusion日志记录。什么也没找到

其次,我尝试了DependencyWalker,在Windows7开发机器上加载有故障的应用程序。它显示了丢失的IESHIMS.DLL。参考post,我找到了IESHIMS.DLL,但在DependencyWalker中注意到它实际上希望DLL位于应用程序的根文件夹中。我把它放在那里,重新运行DependencyWalker,那个错误就消失了。然而,我强烈怀疑还有另一个错误是问题的根本原因:错误:发现了具有不同CPU类型的模块

DependencyWalker中列出的每个模块都是x64,但ieshims.dll和my actual.exe是x86。Updater和Real应用程序都以x86平台为目标

一些同事之前曾建议,由于Real app中的第三方引用,我可能会遇到问题。从我在这里看到的情况来看,情况似乎并非如此

如果有人能帮我解决这个问题,我会非常感激,因为我对诸如x86/x64之类的低级概念没有太多的了解。这意味着在2010/.NET 4.0中在一台速度很快的机器上进行开发与在2005/.NET 2.0中开发具有严重性能问题的应用程序时必须保持XP/32左右的VM之间的区别

我的目标是能够在Win7x64,2010,4.0上开发应用程序,并让更新程序无问题地更新客户端的应用程序版本


非常感谢。

我从未尝试过混合明确针对32位和64位的程序集


您是否尝试过将所有目标更改为任何CPU?

.Net如果不包含不安全的代码,它在64位机器上可以完美地工作。大多数情况下,不安全代码需要更正才能在本机64位模式下工作

但是,您可以要求您的应用程序在WOW(Windows上的Windows)模式下工作,在这种情况下,您的应用程序将完全像在32位机器上一样工作。它在项目属性中启用,将平台目标设置为x86而不是任何CPU