最初分发C#.NET应用程序存在问题

时间:2018-09-28 19:26:36

标签: c# .net winforms

我已经使用WinForms UI工具包在C#.NET中编写了一个应用程序。我正在尝试提供Windows可执行文件,但到目前为止,它们只对我有用。

我通过在Visual Studio 2017中构建EXE和DLL,然后将它们复制到一个位置,然后将其放入.zip存档中来创建发行包。我没有做花哨的一键式发布工作。

该项目位于github(https://github.com/fadden/6502bench)上。第一个尝试使用Win7(see issue)的人“ <程序>停止工作”。第二个人正在使用Win10 Pro,并从事件日志中提取了一些详细信息,表明它在系统DLL(see issue)中崩溃。他们两个都安装了最新的.NET框架。

我还没有在Unity之外使用C#.NET,所以我有点不了解。我完全有可能跳过了“显而易见的”步骤,或者做错了事。

更新:回答一些评论:

  • 它是纯C#,没有本地代码或不安全的代码
  • 两个报告问题的人都确认安装了最新的.NET Framework(4.7.2)
  • 该程序似乎根本没有启动,所以我不确定就本地路径而言,该应用程序可能在做错什么
  • 具体的错误,包括屏幕截图和日志消息,包含在上面链接的问题中
  • 有关VS解决方案和项目的完整源代码位于github

我从评论中得到的感觉是我在做的事情根本上不是错的,所以细节上有些恶魔。

1 个答案:

答案 0 :(得分:0)

我下载了源代码并进行了调试。

在以下两行代码中,我收到了StackOverFlowException

ProjectView.cs

line 3545symbolListView.Columns[2].Width = lastWidth;

line 3719referencesListView.Columns[2].Width = lastWidth;

这是在处理ColumnWidthChanged组件上的ListView事件,并修改列宽。此修改会再次触发该事件,从而导致无限循环和随后的StackOverflowException


但是为什么呢?我将摇摆不定。您可能已经硬编码了一些与显示器的DPI和分辨率相匹配的值。当ListView在您的计算机上实例化时,它不必使用来“重绘”列也不触发事件,但是对于没有相同分辨率和DPI的其他任何人,事件都将触发并导致循环。我可能错了,但听起来对我来说似乎很合理。