分析了一下,感覺很詭異,使用比較笨的辦法,在異常代碼附近加try...catch...並用MessageBox提示信息,最後定位到找不到SQLite的一個DLL:“未能加載文件或程序集“XXX”或它的某一個依賴項。系統找不到指定的文件...”,找到執行程序所在的路徑,確認該DLL是存在的。
所以開始懷疑是環境的問題,因爲在開發電腦上是可以正常運行的,然後在測試虛擬機上裝了一下VS2010,結果裝了後就可以運行,不再報FileNotFoundException。難道要在用戶端也裝一個VS2010?想到上次爲了解決打印問題,不得不在4.0外再帶上.Net Framework 3.5,真是無語啊。
客戶端裝VS2010肯定是不現實的,只有想別的辦法,然後一個一個看引用的DLL,終於找到差異,報FileNotFoundException的地方涉及的DLL是2.0的庫,難道是這個原因嗎?混合模式程序集?按這個思路找到這兩篇文章:
http://www.cnblogs.com/w3live/archive/2012/04/12/2443393.html
http://bbs.csdn.net/topics/390039989
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
整個過程,感覺很坑爹啊,有兩個帶偏的陷阱:一是錯誤提示,FileNotFoundException,離問題的核心有點遠,如果按混合模式程序集來反推,可以沾邊,沒有找到匹配的程序集;一是安裝了VS2010的環境就可以運行,這似乎是SDK還是什麼開了一個全局選項,把混合模式程序集的開關打開了,這給問題的分析帶來困擾。