【问题标题】:Failure to launch: App built in VS2013 can't run outside of Debug folder启动失败:VS2013内置的应用程序无法在Debug文件夹外运行
【发布时间】:2014-03-10 13:46:47
【问题描述】:

我在 Win 7 上使用 VS2013 Pro,并且有一个可以在 bin/x86/Debug 文件夹中编译和运行良好的应用程序(无论有没有调试器),但是在屏幕上或日志中没有消息的情况下立即崩溃,如果复制到任何其他文件夹。

换句话说,如果 exe 的完整路径在编译后以任何方式改变结构,它就会停止工作。路径中的文件夹名称可以更改,但结构不能更改。

我知道这听起来像是某种相对路径的东西,也许确实如此,但我一直没能发现它在寻找什么。

关于正在发生的事情的一个奇怪线索可能是这样的;如果我在没有运行的文件夹中右键单击 exe,然后选择“疑难解答兼容性”,然后选择“尝试推荐的设置”,然后“启动程序...”,它运行正常。

该应用程序本身是 .NET Framework 4 Winforms,它引用了几个 System.* DLL 和一个由同一 VS2013 解决方案中的 C++ 项目生成的 DLL(编译时不会出错)。

那么,这里发生了什么?我可以使用一些想法...

【问题讨论】:

  • 您是复制整个文件夹还是只复制 .exe?如果 exe 依赖于 dll,那么出于显而易见的原因,您也必须复制 dll。
  • 我复制了整个 Debug 文件夹。我尝试将文件夹添加到 c:\temp 和 c:\Program Files (x86),结果相同。
  • 尝试更改应用程序和 dll 的目标平台。他们应该都匹配。 64位或32位。 “任何 CPU”都有可能破坏 64 位机器上的应用程序,否则您可能需要研究 winDBG。
  • 嗯... C++ DLL 的目标平台是 Win32,应用程序的目标是 x86。 VS 似乎没有提供 x86 作为 DLL 的目标选择。唯一的选择是 Win32、ARM 和 x64。另一个 SO 线程说 Win32 与 VS2012 中的 x86 含义相同,所以我认为它在 VS2013 中也意味着相同。该应用程序提供任何 CPU、x64 和 x86。
  • 您是否要向磁盘写入内容?如果您的应用程序没有以管理员身份运行,您将无法在 Program Files 和 C 上除您的用户文件夹之外的任何其他文件夹中写入。您还可以在以管理员身份运行启动 exe 时检查并查看是否有效。

标签: c# c++ visual-studio compatibility


【解决方案1】:

检查应用程序引用的程序集,如果它们不是默认的 .NET 程序集,如 SystemSystem.Data,请转到它们的属性(在属性窗口中) 并为 Copy Local 选项选择 True

确保您已按照上述检查验证了应用程序引用的所有第三方/项目程序集以及应用程序依赖项引用的程序集。

如果您的应用程序正在引用一个程序集,该程序集也被其中一个依赖程序集引用,请确保它们相同,否则在构建一个程序集时将替换另一个程序集,并且您的应用程序可能会因 而崩溃System.BadImageFormatExceptionSystem.IOException。在这种情况下,应用程序可能会崩溃而不会留下任何痕迹。

我希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2017-03-24
    相关资源
    最近更新 更多