【问题标题】:Force a C# WinForms app built with AnyCPU to debug as a 32 bit process强制使用 AnyCPU 构建的 C# WinForms 应用程序作为 32 位进程进行调试
【发布时间】:2013-09-25 02:50:44
【问题描述】:

我有一个使用 AnyCPU 构建的 C# 项目。我们还动态加载当前依赖于 32 位原生 DLL 的功能。关闭此功能后,应用程序作为 64 位应用程序运行得非常愉快。因此,Visual Studio 确定应用程序将在 64 位进程中运行。为了强制应用程序作为 32 位进程运行,我们在主项目上有一个 Post Build 步骤,它使用 CorFlags 将其设置为 32 位。在 Visual Studio 之外运行应用程序时,这可以正常工作。但是,如果我使用 F5 调试应用程序,我会收到一个错误,表明我有 32/64 位不匹配。似乎 Visual Studio 已确定应用程序可以作为 64 位进程运行并相应地设置调试器,但我不知道我已运行 CorFlags 将其强制为 32 位。

有什么方法可以强制 Visual Studio 将应用程序作为 32 位进程进行调试?我想将平台目标保留为 AnyCPU,因为第三方组件最终会升级到 64 位。

【问题讨论】:

  • 便宜的解决方法是添加另一个项目构建为 32 位,并将您的 AnyCPU EXE 作为程序集加载并从 Main 运行 Main...
  • 如果在进程启动后附加调试器会发生什么?

标签: c# debugging x86 64-bit anycpu


【解决方案1】:

很可能你的应用程序的 Visual Studio 的 vshost 是在特定版本中构建的,而调试器无法弄清楚,因为调试器必须与它正在调试的 exe 具有相同的位风格(以及所有它的程序集) .

您可以尝试单独运行 exe,然后通过“调试”菜单附加该进程。可能会为您获得更好的断点结果,但如果没有 vshost,它就不会那么冗长。

这只是一个理论,我目前没有足够的代表来评论你的原始帖子;因此,如果您发现此内容不正确,请忽略。

【讨论】:

  • 我们目前按照您的建议使用附加到进程,但这不是理想的解决方案。
  • 这里有一组非常具体的情况。哦,男孩...大声笑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2020-03-20
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
相关资源
最近更新 更多