今天碰到的一个问题和Client Profile相关的。问题是这样的:一个WPF工程,需要引用另外几个.NET的assembly, 在WPF工程中添加了对这几个assembly的引用,并在程序中可以添加了在这几个assembly中定义的类型(例如:MyCompany.Foo,并在程序头部添加了using MyCompany),到此没有任何问题。可是一编译,报了一大堆错误出来,都是说引用类型或者namespace找不到,其中一条错误如下:

Error 6836 The type or namespace name 'MyCompany' could not be found (are you missing a using directive or an assembly reference?) C:/SourceCode/Project/.../MyCode.cs

可是明明在项目的Reference中已经加入了对相关assembly的引用,并且也能够在Object Viewer查看到应用的assembly中定义的类型。这到底是咋回事呢?让人挠头啊......

无意中在项目的Property页面中看到,该工程的Target framework是 .NET Framework 4 Client Profile。在把它改成了.NET Framework 4以后就可以后,整个工程就可以编译通过了。为啥会这样?

原来默认创建的WPF工程都是瞄准.NET Frameworks 4 Client Profile,除了WPF之外还有其他很多工程也都是如此,参见.NET Framework Client Profile,并且该页面还注明使用Client Profile应用是不能够应用非Client Profile的assembly的:

If you are targeting the .NET Framework 4 Client Profile, you cannot reference an assembly that is not in the .NET Framework 4 Client Profile. Instead you must target the .NET Framework 4. For more information, see Troubleshooting .NET Framework Targeting Errors.

同时在给出的链接中也列出了如果没有遵守这条规则,可能会出现的错误:

When your application targets a particular profile, you might encounter errors if you try to reference an assembly that is not part of that profile. Common errors include the following:

  • The type or namespace name "name" does not exist in the namespace "namespace". (Are you missing an assembly reference?)
  • Type "typename" is not defined.
  • Could not resolve assembly "assembly". The assembly is not listed as part of the "profile" Profile.

These errors can result from different actions. This topic includes descriptions of what might have caused the error and how to resolve the issue.

呵呵,是不是Yong给出的错误信息很相像啊,所以他原因的是因为那些引用的assembly中包含有非Client Profile中的assembly。那么到底哪些是Client Profile中的assembly,哪些又不属于呢? Assemblies in .NET Framework Client Profile列出了所有的属于Client Profile的assembly,不在其列的就属于Client Profile,如果要引用这样的非Client Profile的assembly,你的应用就必须要选择.NET Framework。

对于这个问题,编译器或者Visual Studio可以做得更好一些,提供更有指向性的错误信息,来帮助准确定位错误来源。


最近使用Visual Studio 2010 创建来创建Workflow的Activity,遇到了一个很奇怪的问题。在我创建了一个Workflow ActiveLibrary工程时明明选择的Target Framework = .Net Framework 4 (以下简称为.NET 4 Full),然而创建的工程却显示Target framework = .NET Framework 4 Client Profile (以下简称为.NET 4 Client Profile)。一头雾水啊,啥是".NET Framework 4 Client Profile啊?仔细再看看,发现不只是这个,还有.NET Framework 3.5 Client Profile和.NET Framework 3.5 Server Core Profile。

其实,一开始我也没有意识到这些东东,当我想为工程添加一个对Microsoft.TeamFoundation.Build.Client.dll的Reference时侯,发现怎么也找不到这个Assembly,明明就是放在GAC中的,咋个就找不到呢?然后左查又看,才发现这个Target framework设置有些异样,再把它从新设为.NET Framework 4后,就能够找到了。

先不说这个Client Profile是干啥用的(我想应该是.NET Framework的一个子版本),VS这样的设计还是有些问题的。创建时所选择的Target Framework应该和创建后工程的设置是一致,虽然两者可能仅是小有不同,但如果有问题的话很难查找,而且花费这样的时间是很不值得的。

那么到底加了Client Profile和不加的有啥区别呢? Bing一下就会有发现了。(Bing的照片很是Nice,所以偶尔回去用看看照片顺带着也搜索一下,呵呵!)Jossef的博客What’s new in .NET Framework 4 Client Profile Beta 2 给出了详细的解释。简而言之,加了Client Profile的.NET Framework是不加的子集或者说是精简版(Compact Version)。

为什么要引入这个简化版本呢?

  1. 减少.NET Framework以及包还.NET Framework的应用程序的部署时间;
  2. 减少.NET Framework部署的失败;
  3. 减少.NET Framework在ISV软件的所占大小,从而给其软件更多的空间;
  4. 减少安装了.NET Framework Client Profile的系统受攻击的“界面”,因为Client Profille中部包括ASP.NET和一些服务器所要的组件;

总之,就是Client Profile的Framework更小更精简了,到底小了多少呢?看看下面的表就是知道了:

减少了7 ~ 8MB左右,也不是太明显!不过第4点还是很吸引人的,减少了被攻击的可能。

 

.NET Framework 4 与 .NET Framework 4 Client Profile的更多相关文章

  1. Net Framework 4.0 和.Net Framework 4.0 Client Profile

    Net Framework 4.0 和.Net Framework 4.0 Client Profile区别: .Net Framework 4.0毫无疑问就像是.Net Framework 2.0一 ...

  2. .NET Framework 4 和 .NET Framework 4 Client Profile

    提出这个问题的背景:在新项目中封装了一个DAL来通过EF框架对数据库操作,但是在项目引用后,每当编译时就会出错!更加诡异的是在Web项目和WCF项目中对此DAL引用时就不会出现此问题.作为一个初学者, ...

  3. .net framework client profile

    .NET Framework Client Profile The .NET Client Profile is a subset of the .NET Framework, which was p ...

  4. 在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Framework 4

    在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Frame ...

  5. .NET Framework 4 与.NET Framework 4 Client Profile有什么区别?

    .net framework 自从 2002 年发展至今,已经历了好几个版本,1.0, 1.1, 2.0, 3.0, 3.5 等不同的版本更替,.net framework 的Redistributa ...

  6. .Net Framework Client Profile 和 .Net Framework的区别[转]

    原文链接 VS2010默认是以.Net Framework Client Profile为生成环境的,如果需要更多的功能,应该调用.Net Framework.

  7. Entity Framework 教程——安装Entity Framework环境

    安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...

  8. MVC5 Entity Framework学习之Entity Framework高级功能(转)

    在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...

  9. MVC5 Entity Framework学习之Entity Framework高级功能

    在之前的文章中,你已经学习了怎样实现每一个层次结构一个表继承. 本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时能够利用的高级功能. 在本 ...

随机推荐

  1. 一次完整的HTTP事务是怎样一个过程?

    一次完整的HTTP事务是怎样一个过程? 声明:本文章中的说法仅是个人理解总结,不一定完全正确,但是可以有助于理解. 关于HTTP协议可以参考以下: HTTP协议漫谈  http://kb.cnblog ...

  2. sql server 2008笔记

    sql server 2008开启远程访问数据库 1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策 ...

  3. phpcms模板标签整理

    {template "content","header"} 调用根目录下phpcms\template\content\header文件 {CHARSET} 字 ...

  4. MySQL表结构及数据的备份

    1.Navicat for MySQL 选择要保存的表,右键转储SQL文件,导出的sql文件中包括表的定义和表的数据两部分. 其他办法: (1) create table dust select * ...

  5. Python类的特点 (2) :类属性与实例属性的关系

    测试代码: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) ls=[1,2] #ls是一个列表,也是Parent类的属性(字段) ...

  6. BUG归因

    文字类1.名称不统一:日期/时间,编号/流水号, 2.单元格式 数据类错误:取值错位 编程上 控件类:JS报错 1.框架收缩 2.置灰,限定修改项 3.隐形,不显示 4.XX报错 5.无法输入:自动补 ...

  7. cmd命令查看局域网内计算机信息

    ping [计算机名] ping -a [IP] nbtstat -a [IP] net view arp -a nslookup www.baidu.com 查看当前dns地址 tracert [I ...

  8. uva 489.Hangman Judge 解题报告

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. 修改EsayUi 中 tree 的原有样式,变为according 之类的样式 ,且子菜单显示在右侧

    easyUi 中 tree 框架的属性有: 修改原有展开样式代码如下: onExpand:function(node,param){ $(this).children("li"). ...

  10. zookeeper集群搭建(windows环境下)

    本次zk测试部署版本为3.4.6版本,下载地址http://mirrors.cnnic.cn/apache/zookeeper/ 限于服务器个数有限本次测试了两种情况 1.单节点方式:部署在一台服务器 ...