菜鸟写给菜鸟——The type or namespace name '****' could not be found (are you missing a using directive or an assembly reference
在项目中引用了一个外部的动态链接库dll,在编写代码的过程中都很顺利,就是编译时报错如下:
Error 101 The type or namespace name '****' could not be found (are you missing a using directive or an assembly reference?)
因为我程序的运行环境是.net4.0,而dll是2.0的,起初我怀疑是版本冲突的问题,为此我还专门把这个dll拿到vs2005上试了下,结果是可以正确运行。
但是,回过头来想一下就会觉得版本冲突的想法有些扯淡,哪有高版本的.net不能调用低版本的?这明显不符合向下兼容的原则。
我很想用这个dll,但我又不想抛弃华丽的vs2010去用那“丑陋而笨拙”的vs2005,所以我在vs2010中新建了一个项目,然后通过修改项目的目标框架属性,将项目编译为.net2.0版本的。
在修改目标框架的时候发现了一个细节,目标框架有六个可选框架,除了2.0、3.0、3.5、4.0外,还有3.5 Client Profile和4.0 Client Profile,前面的四个很好理解,后面的这两个Client Profile是干什么的呢?
出于程序员的敏感,我试着把项目的目标框架修改为4.0,重新编译程序、运行,正确无误。然后,我在把目标框架改为4.0 Client Profile,再编译时就会报文章开头时的错误。
问题的起因找出来了,那就是在用vs2010创建项目时默认的目标框架是4.0 Client Profile,而这个dll在4.0 Client Profile无法被识别出来。
但是,为什么4.0可以识别的dll而4.0 Client Profile不能识别呢?4.0版本和4.0 Client Profile版本到底有什么区别呢?
我又去网上搜了下Client Profile,对其的说明如下:
Jeffrey Zhou在.NET Framework 4 与 .NET Framework 4 Client Profile中描述这样提到:
为工程添加一个对Microsoft.TeamFoundation.Build.Client.dll的Reference时侯,发现怎么也找不到这个Assembly,明明就是放在GAC中的,咋个就找不到呢?然后左查又看,才发现这个Target framework设置有些异样,再把它从新设为.NET Framework 4后,就能够找到了。
先不说这个Client Profile是干啥用的(我想应该是.NET Framework的一个子版本),VS这样的设计还是有些问题的。创建时所选择的Target Framework应该和创建后工程的设置是一致,虽然两者可能仅是小有不同,但如果有问题的话很难查找,而且花费这样的时间是很不值得的。
那么到底加了Client Profile和不加的有啥区别呢? Bing一下就会有发现了。(Bing的照片很是Nice,所以偶尔回去用看看照片顺带着也搜索一下,呵呵!)Jossef的博客What’s new in .NET Framework 4 Client Profile Beta 2 给出了详细的解释。简而言之,加了Client Profile的.NET Framework是不加的子集或者说是精简版(Compact Version)。
为什么要引入这个简化版本呢?
- 减少.NET Framework以及包还.NET Framework的应用程序的部署时间;
- 减少.NET Framework部署的失败;
- 减少.NET Framework在ISV软件的所占大小,从而给其软件更多的空间;
- 减少安装了.NET Framework Client Profile的系统受攻击的“界面”,因为Client Profille中部包括ASP.NET和一些服务器所要的组件;
总之,就是Client Profile的Framework更小更精简了。
对Client Profile更多的介绍,请参考http://blogs.msdn.com/jgoldb/archive/2009/10/19/what-s-new-in-net-framework-4-client-profile-beta-2.aspx
posted on 2011-08-10 15:52 CANYOUNG 阅读(42395) 评论(6) 编辑 收藏 举报