我的.NET 2.0应用程序导入非托管的32位dll.当用户通过应用程序内的对话框打开文件时,将加载dll(第一次互操作调用).
当我使用目标平台"Any"通过clickonce部署应用程序时,64位窗口上的用户在尝试从应用程序打开文件时(在加载非托管dll时)会收到BadImageFormatException.我理解这是由于64位进程和32位非托管dll的不可比特的比特.
我使用x86作为目标平台重新部署了应用程序.据我了解,这应该解决比特问题.
但
当我在64位系统上运行为x86构建的已部署应用程序时,我现在在应用程序启动之前立即获得BadImageFormatException.至少测试了三台64位机器.在32位机器上,它没有问题.
当我直接从VS 运行应用程序时(或者不直接运行,只是正常构建,不通过ClickOnce),使用x86目标平台时64位窗口没有问题.应用程序启动,用户可以加载文件 - 互操作调用成功.
我已经连续两天调试这个没有结果 - 我尝试过不同的电脑.它似乎一直在我尝试的其中一台计算机上工作.但是,我没有永久访问此计算机.
我已经设法在我的计算机上构建了一次ClickOnce部署,它可以在64位计算机上运行.这可能只有100次尝试!没有任何改变,唯一改变的变量是我在计算机重启后立即成功构建.
我做了很多次清理/重建/重启VS /重启Windows.我重新安装了VS 2008,现在也是整个操作系统,它没有帮助.
编辑:我刚刚设法得到一个良好的构建(下一个100 :) :)并在部署的目录之间进行比较.问题的根源是ClickOnce在主.exe的清单中生成错误的目标平台:
<asmv1:assemblyIdentity name="app.exe" version="1.0.4.18" publicKeyToken=".token here." language="neutral" processorArchitecture="<b>msil</b>" type="win32" />
Run Code Online (Sandbox Code Playgroud)
processorArchitecture应该是x86.
所以问题是如何在部署时一致地强制VS在清单中生成正确的processorArchitecture.
有人可以帮忙吗?
.net c# clickonce visual-studio-2008 badimageformatexception