Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 程序不';我不能在VisualStudio之外工作_C#_Visual Studio_Dll_Visual Studio 2013_Pinvoke - Fatal编程技术网

C# 程序不';我不能在VisualStudio之外工作

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,因为如果我

我在这个应用程序中使用带有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上的项目,如果有人可以查看:


一些新闻:如果我用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个月后的午夜为您的最大客户投入生产