您的位置:首页 > 其它

编译.NET项目提示“找不到系统命名空间,请添加系统组件的引用”问题的解决方法(该组件已被该项目正确引用)

2006-03-28 00:18 1091 查看
  早几天,一个同事远程登录到我的机器,对我的一个项目进行了些修改。昨天,我打开改项目编译,一大堆的“找不到系统命名空间,请添加组件引用”的错误,我一看,这些系统组件都已被正确引用,只好把它们全部删除,再添加引用,这下好了,编译通过。
  今天再打开该项目进行编译,又提示同样的错误,而那些系统组件还是已经被正确引用,于是,我又按昨天的方法把问题解决了。接着关闭vs20003,再编译,同样的错误又出现了。系统组件还是被引用,但是,我发现那些组件都被复制到了项目的bin目录下,一看组件属性,复制到本地都是"true",于是,我把他们全部删除,再全部添加,并且把“复制到本地”的属性改为"false",编译通过,一看,那些系统组件又莫名奇妙地复制到了bin目录下,并且我手动设置的"false"又全部变成"true"了。一般来说,系统组件的“复制到本地”属性是"false",只是对C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322下组件的引用罢了,不会把文件复制到bin目录下,而我的项目,却偏偏相反,而且,手动改了后又被vs2003自动改回去了。失望之及,准备重新建项目,再把所有的文件添加进去,但是,又觉得太麻烦了,还是再看看有没有更省时省力的解决方法吧。
  于是,我开始查看项目属性,如下图所示的引用路径设置引起了我的注意
  


  (注:开始是没C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\这项的)一看,上面有对自身bin目录的引用,也有对外部组件路径的引用(指E:\My Program\ITEasy\ITEasy.Common\bin\Debug),而没有对系统组件路径的引用,于是我试着把C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\添加进去,再编译,还是不通过。于是,我把系统组件都删除,添加后在编译,果然可以,但是关闭vs2003后再编译,又出现同样的错误,系统组件还是被复制到了bin目录下。这时,我想是不是跟上面引用路径的顺序有关,不然上面怎么会有设置顺序的按钮呢于是把C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\调到第一的问题,再删除系统组件,添加后编译通过,再关闭vs2003,编译依然通过,终于把这郁闷的问题解决了。
  总结:除了每个组件的“复制到本地”属性外,项目的“引用路径”设置也会到组件的引用方式起作用。当引用一个组件的时候,会查找“引用路径”设置里的路径,如果改路径不存在,比如系统组件路径,则vs2003会自动把改组件复制到项目bin目录下,而不管改被添加组件的“复制到本地”属性是什么。但是,我又发现,新建的项目里根本没有对C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\的引用,只有对自身bin目录的引用,我想可能是vs2003的自动机制,新建项目的时候就已经默认了系统组件的路径,虽然在“引用路径”里看不到,但是,它却把对它的引用放到了第一位,这个也可以从另一方面看到,我们注意到新建项目的时候vs2003自动给我添加了常用系统组件的引用,而且这些组件在bin目录下并没有副本,也就是说只是对系统组件路径的引用而已。也许是我同事改了什么,改变了vs2003的默认路径规则,让它不再把没出现在“引用路径”设置中的C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\作为首选路径,而是该项目的bin目录作为了首选路径,这也就是我编译的时候找不到组件的原因。到现在,我也不知道到底是哪里改变了vs2003的默认路径引用规则,或许根本就没什么改变了它,而是vs2003开发者的疏忽,既然把C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\作为首选路径,为什么在项目的“引用路径”设置里没它的身影呢?而做了某些操作后,又撤消了这一默认规则,而是根据“引用路径”设置来加载组件。
  有深入了解的高手,请指点一二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐