winforms C#程序无法在Visual Studio外部作为.EXE启动

yr9zkbsy  于 2023-01-09  发布在  C#
关注(0)|答案(5)|浏览(159)

我用C# winforms创建了一个小程序,当我在Visual Studio 2017中启动它时,它运行良好。但当我构建解决方案并双击.exe时,什么也没发生,没有屏幕出现,甚至任务管理器也看不到它。没有错误。它就像什么也没做!我唯一的猜测是,我构建它是错误的,因为我使用Nuget在解决方案中安装了newtonsofts JSON.NET,我是否需要做一些不同的事情,或者仅仅构建解决方案就可以了?
[已解决]
今天我学会了bin和obj文件夹的区别,谢谢大家的帮助

to94eoyn

to94eoyn1#

根据您的评论:
它位于项目的obj/debug文件夹中
听起来您运行的. exe文件不对。obj文件夹用于存放构建过程中的临时/杂项文件(请参见What is obj folder generated for?)。
相反,如果“Debug”是您要构建的配置,您希望在bin\Debug中运行exe。

就像其他人提到的,确保Newtonsoft.Json.dll也被复制到输出目录。一般来说,程序和它们的依赖项需要放在一起。否则,你的exe将不知道在哪里找到它需要运行的JSON代码。
99%的情况下,您应该假装obj目录根本不存在。
如果这个 * 仍然 * 没有给你指出正确的方向,从命令窗口运行应用程序,任何异常都会被打印出来,窗口会一直打开供你检查(这样做的好处是不需要任何额外的日志记录或异常处理代码来查看这个错误)。
例如,我编写了一个坏应用程序,它在从Main调用的名为Test的方法中获得NullReferenceException。正如您所看到的,即使我的应用程序崩溃了,堆栈跟踪也很容易看到(最初提出这个问题要归功于ColinM)。

lyr7nygr

lyr7nygr2#

我认为启动模块有问题。请按照以下步骤操作
1.在visual studio中打开解决方案
1.双击属性

1.选择Windows应用程序的输出类型
1.确保按如下方式设置启动对象

希望能有所帮助

uqcuzwp8

uqcuzwp83#

我想只有一个原因
在Visual Studio中有一个预定义的command line argument。您的应用程序使用此参数来执行,如果没有它,它将很快自行关闭,您甚至无法看到您的应用程序打开。
Right click on your project in VS -> Properties -> Debug并查看命令行参数中是否有值

vptzau2j

vptzau2j4#

exe及其支持文件应该在bin文件夹中。不要只从bin文件夹中复制exe并尝试运行它。编写一些异常代码以获取详细信息是个好主意。

wgmfuz8q

wgmfuz8q5#

为了将来参考,还有一个原因(我经历过)可以是

System.Diagnostics.Debug.Assert();

语句。在我的例子中,程序从VS启动时正常执行,但当我通过单击其.exe(在调试模式下创建)运行它时,它挂起/冻结。没有异常,没有打印日志。令人沮丧。然后我检查了Windows事件查看器(我们真正的朋友)。它明确显示了问题,罪魁祸首是Debug.Assert()语句。

再次吸取教训:检查
Windows事件查看器〉Windows日志〉应用程序

尤其是当您的应用挂起/冻结/死锁或没有应用日志可用时。

相关问题