单元测试启动调试或运行时出现error MSB3113: Could not find file 'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0'.

这是什么意思?

CLR找不到?smile_whatchutalkingabout 安装的Team Suite调试dll项目都运行的OK啊,这么突然不行了呢? 

第一招,关闭,重启VS2005,错误还在,5555

难道是.net坏了?要重装VS2005?不是吧? 才刚装的啊。。。。。

第二招,Google
还好,microsoft似乎早发现了这个问题,看看来自官网的说明(CLR not found):

When you build a solution of a Microsoft Visual Basic 2005 Windows Application project in Microsoft Visual Studio 2005, you may receive an error message that is similar to the following:

error MSB3113: Could not find file 'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0'.

CAUSE

This problem may occur if all the following conditions are true:
•The solution contains an application that has a reference to another application in the same solution.
•You publish the referenced application to a UNC share or to a Web page.

.....
To work around this problem, use a file reference instead of a project reference in the solution of the Visual Basic 2005 Windows Application project.

里面只提到VB2005,但我使用的是C# 2005的,不管是不是,试一下就知道了。 试一下,OK哦。。

以前的工程为什么没出现这个错误?

对于产生问题的第一个条件我的程序是满足的,而且我相信大家的程序也大都满足这个条件,因为你一般都有一个测试项目,而测试项目一般会引用同一个解决方案里的其它项目,而这些项目之间必然有依赖的关系。

Google的时候发现出现报这个问题的人也不多,没多少提出这个错误的,可能这主要是第二个条件没有得到满足,因为对于win form的项目我们一般不会把它们发布到UNC共享路径下,更加不会把它发不到一个web site上去。

 

把对项目的引用换成直接引用项目生成的dll。这招不怎么好,如果你引用的项目做了修改必须重新添加引用。如果你的项目数目很多,不好意思,有点耐心慢慢加吧。

但是当Click Once出现之后情况就不一样了。如果你用过Click Once技术来发布应用程序,应该知道在发布的时候需要指定发布的地址,“很巧”,这个路径就是一个UNC共享路径或者是一个Web Site。不巧的是昨天我正好用Click Once的方式发布了我的WordDocumentParser V2.0.5.2,接下来的情形就是你们看到的了。

那简单,把Click Once请走不就可以了吗?上了贼船就不要想溜了:-)Click Once这个被MS吹得一塌糊涂的技术,不知道是不是太强了,抑或是我了解的不够深入,反正我是请不走它。不过好像C#的MVP也是拿它没办法,看看“Have you ever seen MSB3113 and MSB3114 errors?”。

ClickOnce的其它问题

“ClickOnce-ed 之后程序的配置怎么办?”

  1. 你知道程序被安装在哪里了吗?
    如果你直接在系统里一个个文件夹找,可能花上好长的时间,而且不一定能找得到,因为路径实在是没有一点可读性。看看我的WordDocumentParser2.0.5.2安装后是什么样的路径:
    C:\Documents and Settings\ld.SSTC.000\Local Settings\Apps\2.0\14VVC6O0.W75\5HJP1NQ1.DHV\word..tion_f25e17f6175c148c_0002.0000_83cf034d7666f876
    划线部分可能还可以看出点东西,可是其它的呢?如果要找的话我建议直接在注册表里搜索安装程序的名字,比如这里的WordDocumentParser,在找到的结果中有一个是“程序\开始\按装程序的快捷方式”,看它的键值就知道路径了。很费劲,我想MS没打算让我们知道路径。
  2. 客户需要自定义配置文件,在哪里修改呢?
    比如我部署到客户端的时候数据库可能要改成正式的库。一般情况下我就是接改hibernate.cfg.xml文件,可是在ClickOnce之后,到哪里找这个文件?不在前面说的程序安装路径下吗?我们倒是希望这样,可是事实是在:
    C:\Documents and Settings\ld.SSTC.000\Local Settings\Apps\2.0\Data\OJYXYKTM.5BN\QJ6OQADO.2TX
    \word..tion_f25e17f6175c148c_0002.0000_83cf034d7666f876\Data
    在修改配置文件之前,你最好确认一下程序与配置文件的对应关系,可以通过f25e17f6175c148c_0002.0000_83cf034d7666f876这串字符来确认。顺便说一下配置文件路径右面为什么有个Data,这是因为在ClickOnce的时候它是作为程序的数据文件发布的,所以除了配置文件之外的其它数据文件也会放在这里。
    不过这样是在太烦了,每升级一次就得修改一次配置文件,当然你可以把数据库配置等功能写在程序里面,但是那也是开发量,为什么不能是真正的AutoUpdate呢?
  3. 升级,是真的“升级”吗?
    如果这里说的升级是指下载一些更新包,然后替换一些原有的,那么很抱歉,不是的。所谓的更新实际上是从新下载了一个新版本的程序,并在上一版本的父目录下下安装了另一个副本,然后将快捷方式修改并指向新的程序。

资料内容来源: http://raderdotnet.spaces.live.com/Blog/cns!3461738A506327E!371.entry
本文保留主要内容,但按照个人研究问题的思路重新编排了。 记录之以便自己查阅。如能给其他遇此问题的同仁以参考且感觉比原文易读,则甚幸。

                                  Collect and Edited By kevin