最近接了个项目,在打开窗体设计器时提示"无法创建新的堆栈防护页面",点击确定后vs直接关闭。查了相关资料,大部分说是控件可能存在递归,导致报错。我使用了最笨的排除法,先对设计代码全部注释,成功打开设计界面,然后逐步取消各控件的代码,找到引发错误的控件。
经排除发现,是如下代码引发了异常:
this.Controls.Add(this.mainPageLayout);
查看this.mainPageLayout,原来是自定义控件
public Controls.LayouotControl.MainPageLayout mainPageLayout;
打开这个控件查看,发现报错
通过堆栈跟踪,发现有这样一段代码
string path = string.Format(@"{0}\db\{1}.db", Environment.CurrentDirectory, Applicate.MyAccount.userId);
Environment.CurrentDirectory居然是C:/windows/system32
我改成
Application.StartupPath
发现居然是vs2019的执行程序路径。
那么就是说在打开窗体设计器时,这个方法默认是vs2019的程序路径。
我又看了一下这个控件的设计代码,原来在初始化界面时绑定了model,导致打开设计界面会去找数据库文件,而此时程序还未启动,Environment.CurrentDirectory目录与项目无关,我想不出在未启动程序时怎么获取指定程序的执行路径,只能在system32下放了相关的文件。
问题解决