2009-02-18 32 views
3

时需要86了.NET依赖链我们有使用p4.net几个项目,有管理的DLL,而这又依赖于p4dn.dll,一个32位的非托管的DLL。这在x64系统上有问题,所以我不得不去每个使用p4.net的项目,并将其处理器类型设置为x86。如何构建

如果我理解正确的问题,那就是当.NET加载一个exe文件,它会检查清单,如果没有它什么是最好的处理器类型。然后,当它运行到32位的DLL,它吧。

我可以去使用p4.net每个项目并将其标记为32位。但是我们有很多这些。另外,人们会继续制作新的并忘记设置32位,然后在别人尝试在x64上使用它时,我们会再次遇到这个问题。

我的问题是:有没有办法让.NET会自动加载使用p4dn.dll 32位的任何应用程序?如果失败了,IDE是否有办法检测到这一点并且无法构建?

或者是有可能使一个.manifest的文件,使任何应用程序使用它们在32位会自动运行,我可以把旁边的p4api或p4dn.dll?

回答

2

如果您完全没有其他选择,则可以使用标记作为自动构建脚本的一部分,以将所有.NET dll标记为x86 - corflags /32bit+ file.dll。 尽管我认为适当的开发者教育是更充分的解决方案。

1

CLR只在从GAC加载程序集时才检查平台类型。我猜p4dn.dll包含在应用程序根文件夹下,所以我认为你的逻辑错误。

看来,当它了WoW64模式的运行,你的应用程序在64位模式下运行本机可p4dn.dll不能使用。我认为最好的方法是编译所有针对x86(32)平台的项目。或者将它分解成部分,所以p4dn.dll调用者总是以WoW64模式运行。

此外,您应该联系p4net开发人员以添加完整的x64平台支持。

+0

不应该是“我认为最好的方法是编译所有针对_x86_平台的项目”?从我的理解,这是必要的,有一个应用程序运行在WO64模式。 – 2009-02-18 21:13:22

0

我不知道有什么办法自动做到这一点。我会建议你做以下几点:

  • 训练你的开发人员,
  • 加入这个话题您的内部知识基础和
  • 添加x64平台到测试环境

另外,您可能会想到编写一个VS加载项来检查正确的目标平台。但随后可能会动态创建COM组件...