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还是什么开了一个全局选项,把混合模式程序集的开关打开了,这给问题的分析带来困扰。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章