3

我们有几个项目使用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 有没有办法检测到这一点并且无法构建?

或者是否可以制作一个我可以放在 p4api 或 p4dn.dll 旁边的 .manifest 文件,以便使用它们的任何应用程序将自动以 32 位运行?

4

3 回答 3

2

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

于 2009-02-18T21:54:48.443 回答
1

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

当 p4dn.dll 在 WoW64 模式下运行并且您的应用程序本机在 x64 模式下运行时,它似乎无法使用。我认为最好的方法是编译所有针对 x86 (32) 平台的项目。或者将其分解为多个部分,因此 p4dn.dll 调用者将始终在 WoW64 模式下运行。

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

于 2009-02-18T20:53:47.140 回答
0

我不知道有任何方法可以自动执行此操作。我建议您执行以下操作:

  • 培训您的开发人员,
  • 将此主题添加到您的内部知识库并
  • 将 x64 平台添加到您的测试环境

此外,您可能会考虑编写一个 VS 插件来检查正确的目标平台。但是也可能会动态创建 COM 组件......

于 2009-02-18T20:54:59.180 回答