C# 程序不';我不能在VisualStudio之外工作
我在这个应用程序中使用带有p/Invoke的非托管dll,我总是在VisualStudio中对它进行测试(在x86CPU上使用调试模式,因为dll只有x86),它工作得很好。但是,当我在一段时间后手动启动exe时(可能是在第一次使用这些DLL操作时,但我不知道确切情况),它表示exe已停止工作,并开始检查解决方案(如果有必要,我在Windows 8.1上使用Visual Studio 2013)。我试图将DLL作为现有项添加到项目中,但没有帮助。我也知道,这不是因为它找不到那些DLL,因为如果我删除它们,它不会崩溃,只是冻结而没有任何错误消息。它在VisualStudio中的工作方式不应该与手动启动的相同吗 当我从VisualStudio运行时,还有一个奇怪的错误:一切正常,但有时VisualStudio只是突然停止调试,好像程序关闭了,我的应用程序的GUI冻结了,我只能通过关闭VisualStudio来关闭它(当我关闭它时,GUI消失)。也许这是一个完全不同的问题,但它可以连接起来 编辑: 下面是github上的项目,如果有人可以查看:C# 程序不';我不能在VisualStudio之外工作,c#,visual-studio,dll,visual-studio-2013,pinvoke,C#,Visual Studio,Dll,Visual Studio 2013,Pinvoke,我在这个应用程序中使用带有p/Invoke的非托管dll,我总是在VisualStudio中对它进行测试(在x86CPU上使用调试模式,因为dll只有x86),它工作得很好。但是,当我在一段时间后手动启动exe时(可能是在第一次使用这些DLL操作时,但我不知道确切情况),它表示exe已停止工作,并开始检查解决方案(如果有必要,我在Windows 8.1上使用Visual Studio 2013)。我试图将DLL作为现有项添加到项目中,但没有帮助。我也知道,这不是因为它找不到那些DLL,因为如果我
一些新闻:如果我用Ctrl+F5运行它,它也会崩溃。F5和Ctrl+F5之间的区别是什么,这可能会导致此问题?感谢您的帮助,我的问题得到了解决:我调用了一个只有2个参数的非托管函数,而它有3个参数。然而,我仍然不明白为什么它是在调试模式下工作的,而不是在没有调试的情况下工作的。在谷歌上到处搜索,没有真正简单的答案。这里是大家(至少对我来说很简单): 在Visual Studio中运行控制台应用程序时,请查看底部的输出窗口,获取..\bin\Debug\*.exe的位置
将*.exe和*.config复制到所需的文件夹中,运行它,它在Visual Studio中的工作方式应与此相同。是否需要使用regsvr32注册DLL?您是否也尝试过在VS之外以管理员模式运行应用程序?请在应用程序中添加一些日志记录。即使是围绕主对象的一个try-catch,将异常/堆栈跟踪输出到控制台,也可能有助于调试您的内容。@Ahmedilyas这是一个C库,而不是COM库,据我所知,我不需要注册它。@Pierre Lucpinoult我试图将updateTask放入try-catch中,但没有帮助(我认为这部分是问题所在,因为我首先使用DLL,如果我删除更新任务开始部分,它不会崩溃)。(请参阅上面的代码)我遇到过这样的问题,在调试器下运行时它没有崩溃的原因是,有问题的代码在以下
if
语句中:if(System.Diagnostics.Debugger.IsAttached==false)
。这很难做到,但您可能需要检查是否在连接到调试器时故意运行不同的代码。未定义的行为是一个问题,很高兴它立即失败,而不是6个月后的午夜为您的最大客户投入生产