.Net Framework 4.0和.Net Framework 4.0 Client Profile之间差异引起的错误

遇到问题

首先描述一下自己在开发中遇到的一种情况:

我自己有个类库,主要是将自己开发中积累。但是近期将类库升级到Visual Studio 2010下竟然不能够使用了,在Visual Studio2008下正常,很是蛊惑,怎么可能呢?是2010的bug吗?不会啊,现在是正式版,别人都没有说过这个bug啊,肯定是自己哪弄错了。

解决问题

我的类库是Cmj.dll,而我要用的项目是ConfigTools项目,ConfigTools是直接用VS2010建立的新项目,选择的是.Net Framework 4.0版本的框架。而类库最初是用VS2010打开自动升级的,后来在ConfigTools中不能使用我就新建了一个类库Cmj用的.Net Framework 4.0版本框架。但是在ConfigTools中使用还是不行。

经过反复试我发现,我新建另一个类库(同样是4.0版本),里面只有一个类在ConfigTools中是可以使用的。怎么会这样呢?是我的类库Cmj本省有问题吗?我于是再建立一个Cmj类库一个一个添加类,然后在ConfigTools项目中使用。结果发现当我添加到类IIS7时Cmj类库不能够使用了,而这个类唯一特别之处就是用到了Microsoft.Web.Administration这个在C:/Windows/System32/inetsrv下的类库文件,这个引用是自己找到路径C:/Windows/System32/inetsrv选择的Microsoft.Web.Administration.dll,也就是添加引用时.Net标签页里面没有是在Browse中选择的。但是为什么会这样啊,首先这个引用应该不是什么特殊的第三方控件啊(或者它不算第三方的吧)?以前也会引用第三方控件库啊(那试也没有这问题啊)?

好了,是不是这个组件在我的Cmj中使用了,再将Cmj类库添加到ConfigTools中就不行了?注意在Cmj类库中可以正常使用的。于是干脆直接将Cmj中IIS7这个类添加到ConfigTools中,不引用Cmj中的了,再添加上Microsoft.Web.Administration.dll。这样总可以了吧,在Cmj中都能用Microsoft.Web.Administration.dll,在ConfigTools中肯定可以啊,心想。

但是竟然说找不到Microsoft.Web.Administration,天啊!怎么可能呢?到底是什么错误呢?虽然问题没有解决但是我却有种将要发现问题的感觉?估计是这两个项目(Cmj类库项目和ConfigTools windows窗体项目)版本差异。于是我点击Cmj项目属性发现在Application标签页中Target Framework是.Net Framework 4.0,这是正常啊,我建立项目的时候选择的就是.Net Framework 4.0,然后再看ConfigTools的竟然是.Net Framework 4.0 Client Profile ,于是修改成.Net Framework 4.0在ConfigTools中可以使用Microsoft.Web.Administration了,当然肯定我也可以直接引用我的Cmj类库了。

分析原因

错误原因很简单,就是.Net Framework 4.0 Client Profile中不能使用Microsoft.Web.Administration。而且提醒大家的是你在建立项目时虽然选择.Net Framework 4.0但是在Target Framework中却是.Net Framework 4.0 Client Profile(至于我的Cmj为什么是.Net Framework 4.0 我真的不记得但是做什么操作了,后来我又试了试建立.Net Framework 4.0 类库,然后查看Target Framework时确实是.Net Framework 4.0 Client Profile)。

再顺便说说.Net Framework 4.0 和.Net Framework 4.0 Client Profile区别吧:.Net Framework 4.0毫无疑问就像是.Net Framework 2.0一样是.Net Framework 的 4.0版本;而.Net Framework 4.0 Client Profile是.Net Framework 3.5 sp1的子集,是.Net Framework 4.0 简化版,是面向客户端应用程序的(估计这也是为什么不能够使用IIS7 API的原因)。

你可能感兴趣的:(framework)