错误:【Program,CurrentDomain_UnhandledException 错误:“Utility.SQLiteCreator”的类型初始值设定项引发异常。】

WinFrom程序,错误:2018-07-03 11:23:35 / Program,CurrentDomain_UnhandledException 错误:“Utility.SQLiteCreator”的类型初始值设定项引发异常。
Stack Trace:
   在 Utility.SQLiteCreator.createNewDatabase()
   在 OverseaPMS.Program.createDBSQLite() 位置 d:\Workspace_VS\OverseaPMS_7.2\OverseaPMS\OverseaPMS\Program.cs:行号 258

   在 OverseaPMS.Program.Main(String[] args) 位置 d:\Workspace_VS\OverseaPMS_7.2\OverseaPMS\OverseaPMS\Program.cs:行号 68 / Void createNewDatabase() / “Utility.SQLiteCreator”的类型初始值设定项引发异常。

解决办法:在AutoUpdate程序的debug文件夹下加入程序OverseaPMS.exe的配置文件。


背景:

在做程序自动化检测更新时,AutoUpdate可以正常下载程序OverseaPMS.exe及其运行所需的文件,如dll,帮助手册等等。但是当OverseaPMs.exe等所有文件下载完成后,却不能运行。提示“Utility.SQLiteCreator”的类型初始值设定项引发异常。上网查资料,解决方法基本上是 检查类的静态成员是否正常完成初始化,根据这个,我检查了很多遍SQLiteCreator的静态成员的初始化,发现都是正常的。这就很奇怪了,单独在VS2013运行OverseaPMS,是可以运行的,但是把OverseaPMS.exe及其运行所需的文件放到服务器上,通过AutoUpdate下载下来,再运行OverseaPMS,却不行。

最后尝试是,把运行正常的OverseaPMS的debug文件下的所有文件都复制到AutoUpdate的debug文件下,再次执行更新操作,发现可以运行。所以,这应该是拷贝到服务器上的OverseaPMs.exe依赖文件少于OverseaPMS的debug下的文件。

最后,多次尝试,发现是缺少了OverseaPMS.exe.config,.exe.config是程序的配置文件,是程序必不可少的文件,因为里面有数据库等的配置。

再遇到这种问题,可以有以下解决思路

1. 类构造函数(静态构造函数),确保已经完成初始化操作;

2. 类的静态成员和属性正常完成初始化;

3. 导致错误发生还可能是导入的引用sqlite.dll上(转自 类型初始值设定项引发异常):如果sqlite.dll是32位的,但目标 平台是x64的,有关sqlite的静态变量初始化异常,引起sqlite类初始化错误,引发 TypeInitializationException异常。

这里有app.config, *.exe.config 和 *.vshost.exe.config

转: app.config *.exe.config 和*.vshost.exe.config基础学习



猜你喜欢

转载自blog.csdn.net/nancy50/article/details/80900619