任何CPU参考x64有效吗?

4

当系统是64位时,从AnyCpu dll引用x64-dll是否是有效的场景?

我之所以问这个问题,是因为我在这里遇到了一些问题,会出现以下异常:

"无法加载文件或程序集“XY”或它的某一个依赖项。尝试加载格式不正确的程序。"

在过去的几年中,我遇到了很多次这个问题,有时候看起来可以解决,有时候则不行。


如果它只能在64位系统上运行,那么你应该针对x64进行目标设置。 - Matteo Umili
1
是的,这是有效的。它经常出错是因为程序员往往不知道如何正确配置他们的解决方案,以确保它实际上在64位模式下运行。他们会更改解决方案平台名称(对托管项目无关),或者忘记更改发布配置的设置。只有EXE项目上的“目标平台”设置才是重要的。 - Hans Passant
是的,你说得对。但问题更多地是一般性的。我只是想知道是否可以从任何CPU引用x64。 - DanielG
这不是一个好的做法,因为它只能在x64系统上运行AnyCPU程序集,所以针对AnyCPU将毫无意义。 - Matteo Umili
我同意这是毫无意义的...但我仍然不确定它是否有效。我遇到了几个问题,它没有按预期工作。因此,我认为这可能不是一个有效的场景,我们会得到意外的行为,所以它可能会工作,但不能保证。 - DanielG
1个回答

2
< p > 一个AnyCPU程序集可以完全针对x64 DLL目标,但是需要您确保您的AnyCPU程序集实际上作为x64进程执行。请注意,Visual Studio的后续版本已添加了"优先使用32位"选项以进行程序集。因此,您需要确保关闭此选项,并且您没有使用机器上的任何设置来覆盖该设置。

还要注意,如果您的AnyCPU程序集引用其他可能仅作为目标机器上的x86程序集可用的程序集,它将被运行为x86进程。
老实说,如果您知道您希望该过程仅作为x64运行,那么在我看来,将其编译为x64最有意义。至少这样,如果您最终在不兼容的环境中运行它,则会收到更好的错误消息(即事件日志将包含与您的进程不兼容的依赖关系的信息,而不是某个其他依赖关系实际上是如预期所述的依赖关系)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接