ClickOnce發佈的WPF程序遇到詭異的System.IO.FileNotFoundException

        最近開發的一個WPF程序,使用ClickOnce發佈,拿到測試環境啓動不了,使用事件查看器,找到錯誤:“說明: 由於未經處理的異常,進程終止。異常信息:System.IO.FileNotFoundException...”。
        分析了一下,感覺很詭異,使用比較笨的辦法,在異常代碼附近加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


        修改app.config如下,終於把問題解決了:
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

  
整個過程,感覺很坑爹啊,有兩個帶偏的陷阱:一是錯誤提示,FileNotFoundException,離問題的核心有點遠,如果按混合模式程序集來反推,可以沾邊,沒有找到匹配的程序集;一是安裝了VS2010的環境就可以運行,這似乎是SDK還是什麼開了一個全局選項,把混合模式程序集的開關打開了,這給問題的分析帶來困擾。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章