我正在使用Visual Studio 2015开发WPF应用程序(x64,.Net 4)。作为应用程序主页的一部分,我有一个打开文件浏览器的按钮。
Button Click事件如下......
openFileDialog.InitialDirectory = Environment.SpecialFolder.Personal.ToString();
openFileDialog.Title = "Select Profile Configuration Files";
openFileDialog.Filter = "Profile Config Files (*.cfg)|*.cfg|All files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == true)
{
try
{
_LoadConfigProfile(openFileDialog.FileName.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message, "Error Opening Prfile", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
但是,每次我点击按钮时,文件浏览器都会打开,但是在一秒钟之内,应用程序就会崩溃。
使用断点,我发现崩溃发生在openFileDialog.ShowDialog()
行。
VS2015中显示的错误如下
作为应用程序的一部分,我使用SQLite来处理一些数据。我在Application的开头打开了一个DataBase Connection。
以前有人遇到过这样的问题吗?我怎么解决这个问题?
如果您想了解有关应用程序和错误的更多信息,请进行评论。
答案 0 :(得分:3)
在调用create OpenFileDialog对象之前,文件选择器位于WPF应用程序中可能未加载的公共控件DLL中。检查输出日志,看它此时没有加载不同的(附加的)sqlite.dll。
正如评论中所提到的,我遇到了这个问题,之前我曾避免使用文件选择器,但是我需要添加一个新的要求,并且在文件选择器对话框显示之后应用程序再次崩溃。
如果查看输出日志,它会显示sqlite源代码中的行号,如果在库已被使用时调用它,则它是sqlite3_config中的抛出异常。 在输出日志中进一步查看显示,在此异常发生之前,commoncontrols.dll和一个额外的sqlite.dll是从C:\ Program Files(x86)\ Dell Backup And Recovery \加载的 - 即不同的sqlite.dll比已经使用的,当然不是图书馆的位置,但可能是在路径的早期。我卸载了Dell备份和恢复,并且不再出现错误。