【解决方案】.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文件中AssemblyTitleAssemblyProduct是否有误?如图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和一些服务器所要的组件
  • 从下图可以看到两者大小差异

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

个人学习,欢迎指正,仅供参考~

posted @ 2012-02-09 15:00  dotNET程序猿  阅读(8708)  评论(1编辑  收藏  举报