今天在解决方案中添加了一个新的项目,因用到其它的DLL所以在引用中增加了该DLL的引用。添加完后重新编译发现报以下错误:
The type or namespace name XXX could not be found (are you missing a using directive or an assembly reference?)
仔细试验后发现将DDL引用加上后,在cs文件中是可以取到该类下的方法和属性的,但编译后报错,且报错后也无法再取到该类下的方法和属性。而该解决方案下的其它项目也是相同的引用和写法却没有出错。初步判断是项目的设置有问题。
与其它项目比较后发现是Target framework的选项不对。当前选择的是.NET Framework 4 Client Profile,而其它项目选择的是.NET Framework 4。修改该选项后编译成功。
上网搜索后发现原来.NET Framework 4 Client Profile是.NET Framework 4的精简版。.NET Framework 由于起来越大对于发布很不方便。试想一下如果只是一个小小的应用程序文件 (几十或几百KB) 却要夹一个那 大的 .NET Framework Redistributable Package,大概很多开发人员都会觉得麻烦,就算开发人员接受,但在企业网络的 IT 管理人员就不一定会接受了。所以微软就将 .NET Framework 部份不常用的功能由主函数库中抽离出来,让Redistributable Package可以缩小,有利于重新发布应用程序。这样就会造成许多类不可用。如果引用的DLL中用到了那些被取消的类就会报错。