[英]WinRT c# compiled to exe but does not run outside visual studio
[英]C# program wont start outside visual studio as a .EXE
我在 C# winforms 中创建了一个小程序,当我在 visual studio 2017 中启动它时运行良好。但是当我构建解决方案并双击 .exe 时,没有任何反应,没有屏幕出现,甚至任务管理器也看不到它。 没有错误。 好像它什么也没做,我唯一的猜测是我构建错误,因为我在 te 解决方案中使用 Nuget 安装 newtonsofts JSON.NET? 我需要做任何不同的事情还是应该只构建解决方案?
[解决了]
今天知道了bin和obj文件夹的区别,感谢大家的帮助
根据您的评论:
它在项目的obj / debug文件夹中
听起来您运行的是错误的.exe。 obj
文件夹用于临时/杂项。 构建过程中的文件(请参阅生成obj文件夹的目的是什么? )。
相反,如果要为“ Build”构建配置,则要在bin\\Debug
运行exe。 您可以在VS顶部看到哪种配置。
就像其他人也提到的那样,请确保将Newtonsoft.Json.dll也复制到该输出目录。 一般来说,程序及其依赖项必须在一起。 否则,您的exe将不知道在哪里可以找到需要运行的JSON代码。
99%的时间,您应该假装obj
目录不存在。
如果仍然无法为您指明正确的方向,请从命令窗口运行该应用程序。 任何异常都应打印到该窗口上,并且该窗口将保持打开状态供您检查(这具有不需要任何其他日志记录或异常处理代码即可看到此错误的好处)。
例如,我编写了一个错误的应用程序,该应用程序在从Main
调用的称为Test
的方法中获得了NullReferenceException
。 如您所见,即使我的应用程序崩溃了,堆栈跟踪也很容易看到(向ColinM致谢是因为它最初用于启动)。
我认为只有一个原因
在Visual Studio中预定义了命令行参数 。 您的应用程序使用该参数来执行,如果没有该参数,它会很快关闭自身,甚至看不到您的应用程序已打开。
Right click on your project in VS -> Properties -> Debug
然后查看命令行参数中是否有值
exe及其支持文件应位于bin文件夹中。 不要仅从bin文件夹复制exe并尝试运行它。 编写一些异常代码以获取详细信息是一个好主意。
为了将来参考,另一个原因(我经历过)可以是
System.Diagnostics.Debug.Assert();
声明。 在我的例子中,程序从 VS 启动时正常执行,但当我通过单击 its.exe(在调试模式下创建)运行它时,它挂起/冻结。 没有例外,没有打印日志。 令人沮丧。 然后我检查了 Windows 事件查看器(我们真正的朋友)。 它明确显示了问题,罪魁祸首是 Debug.Assert() 语句。
再次吸取教训:检查
Windows 事件查看器 > Windows 日志 > 应用程序
特别是当您的应用程序挂起/冻结/死锁或没有可用的应用程序日志时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.