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基础学习