您的位置:首页 > 编程语言

.NET添加引用后,但在代码中使用using时却找不到命名空间?

2012-11-29 10:20 633 查看
Address: http://www.cnblogs.com/lichence/archive/2012/02/09/2343966.html
这几天搭一个C/S的项目框架,发现一个以前没有注意过的问题,即:

在同一个解决方案(.sln)下的A工程(.csproj)引用B工程的.dll后,在代码中使用using是无法找到对应命名空间。

如图1所示,MCC.Client引用了MCC.Business工程生成的.dll,但在图2中,报了“Error 2 The
type or namespace name 'UserProfile' could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\a531032\My Documents\visual studio
2010\Projects\MCC\MCC.Client\SysUtility\AppContext.cs 15 24 MCC.Client”的错误。



图1 解决方案结构



图2 编译错误

由于之前修改过工程名称,一直以为是这个原因造成的引用失败,便沿着一下方向查了一遍错误,最终找到了原因。

查找被引用工程(此例中的MCC.Business工程)的Properties/Assembly.cs文件中AssemblyTitle和AssemblyProduct是否有误?如图3所示。



图3 MCC.Business的Properties/Assembly.cs文件

右键查看被引用工程(此例中的MCC.Business工程)的属性是否正确?如图4所示



图4 MCC.Business的属性页

查找引用者工程的.csproj中的值是否与MCC.Business的Assembly信息一致?如图5所示



图5 MCC.Client的.csproj文件

查看引用者工程的属性页,字段“Target Framework” 是否置为了“.NET Framework 4 Client Profile”?如图6所示



图6 MCC.Client的属性页

问题找到了

我的问题出在了创建MCC.Client工程(一个WinForm工程)时,VS 2010默认选择了“.NET Framework 4 Client Profile”,以便于在客户端部署时的便捷。但由于MCC.DataAccess工程中引用了System.Data.OracleClient(其并非包含在.NET Framework 4 Client Profile库中,而在.NET Framework 4 Full库中)。之后,MCC.Business引用了MCC.DataAccess生成的.dll,当MCC.Client去引用MCC.Business生成的.dll时,发现该.dll又引用了.NET
Framework 4 Client Profile不包含的内容,所以在编译时MCC.Client对MCC.Business的.dll给出编译错误。

========================

.NET Framework 4 Client Profile 相对于 .NET Framework 4 的区别

是后者的一个子集

减少.NET Framework以及包还.NET Framework的应用程序的部署时间

减少.NET Framework部署的失败

减少.NET Framework在ISV软件的所占大小,从而给其软件更多的空间

减少安装了.NET Framework Client Profile的系统受攻击的“界面”,因为Client Profille中部包括ASP.NET和一些服务器所要的组件

从下图可以看到两者大小差异



来源于网络的一些参考博文:

CSDN上网友的分析讨论《史无前例的Bug》

StackOverFlow上老外的问题

.NET Framework 4 Client Profile详解,与.NET Framework 4 Full共有的.dll

个人学习,欢迎指正,仅供参考~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐