今天碰到的一个问题和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. 百度地图API 海量点 自定义添加信息

    <!--添加百度地图--> <script type="text/javascript" src="http://api.map.baidu.com/a ...

  2. class.equals

    public boolean equals(Object obj) 1.自身和自身应该是equals的. X.equals(x) return ture2.如果A等于B, 那么B也就等于A . X.e ...

  3. haproxy simple cfg

    global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group hap ...

  4. 【云计算】docker前世今生

    下一代云计算模式:Docker正掀起个性化商业革命 作者: 吴宁川  来源: ITValue  发布时间: 2015-09-20 10:41  阅读: 12976 次  推荐: 24          ...

  5. hadoop MapReduce Yarn运行机制

    原 Hadoop MapReduce 框架的问题 原hadoop的MapReduce框架图 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobClient) ...

  6. hdu3709

    枚举+数位dp 注意处理数字为0和1的情况. #include <cstdio> #include <cstring> using namespace std; #define ...

  7. Mybatis中的in查询和foreach标签

    Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...

  8. 6. javacript高级程序设计-面向对象设计

    1. 面向对象设计 1.1 理解对象 1.1.1 属性类型 (1). 数据属性:相当于对象的字段,包含一个数据值的位置,在这个位置可以读取和写入值.数据属性中有4个描述其行为的特性: l [[Conf ...

  9. JS 异步加载的方法

    (1) defer,只支持IE : <script type="text/javascript" defer="defer"> </scrip ...

  10. 【STL】 set集合容器常用用法

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...