【解决方案】.NET添加引用后,但在代码中使用using时却找不到命名空间?
这几天搭一个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
个人学习,欢迎指正,仅供参考~
![]() |
|
作者:dotNET程序猿
|