我们有几个使用托管动态链接库p4.net的项目,而托管动态链接库依赖于32位非托管动态链接库p4dn.dll。这在x64系统上有问题,所以我必须转到使用p4.net的每个项目,并将其处理器类型设置为x86。
如果我没理解错的话,那就是当.NET加载一个exe时,它会检查一个清单,如果没有,它会根据处理器类型做任何最好的事情。然后,当它运行到32位dll时,它就会吐出来。
我可以转到使用p4.net的每个项目,并将其标记为32位。但我们有相当多这样的东西。此外,人们会继续制作新的,并且忘记设置32位,将来当其他人试图在x64上使用它时,我们将再次遇到这个问题。
我的问题是:有没有办法让.NET自动加载任何使用p4dn.dll作为32位的应用程序?如果做不到这一点,有没有办法让IDE检测到这一点并导致构建失败?
或者有没有可能生成一个.manifest文件,放在p4api或p4dn.dll旁边,这样使用它们的任何应用程序都可以在32位中自动运行?
发布于 2009-02-18 21:54:48
如果您没有其他选择,您可以使用x86作为自动构建脚本的一部分,将所有的.NET all标记为x86- corflags /32bit+ file.dll。虽然我认为对开发人员进行适当的教育是更合适的解决方案。
发布于 2009-02-18 20:53:47
CLR仅在从GAC加载程序集时才检查平台类型。我猜p4dn.dll包含在应用程序根文件夹下,所以我认为您的逻辑是错误的。
当p4dn.dll在WoW64模式下运行,而您的应用程序本身在x64模式下运行时,似乎不能使用它。我认为最好的方法是编译所有针对x86 (32)平台的项目。或者将其分成几个部分,这样p4dn.dll调用者将始终在WoW64模式下运行。
此外,您还应该联系p4net开发人员以添加完整的x64平台支持。
发布于 2009-02-18 20:54:59
我不知道有什么方法可以自动做到这一点。我建议您执行以下操作:
此外,您可能会考虑编写一个VS外接程序来检查正确的目标平台。但随后可能还会动态创建COM组件...
https://stackoverflow.com/questions/562756
复制相似问题