.NET Framework 4 与 .NET Framework 4 Client Profile
今天碰到的一个问题和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)。
为什么要引入这个简化版本呢?
- 减少.NET Framework以及包还.NET Framework的应用程序的部署时间;
- 减少.NET Framework部署的失败;
- 减少.NET Framework在ISV软件的所占大小,从而给其软件更多的空间;
- 减少安装了.NET Framework Client Profile的系统受攻击的“界面”,因为Client Profille中部包括ASP.NET和一些服务器所要的组件;
总之,就是Client Profile的Framework更小更精简了,到底小了多少呢?看看下面的表就是知道了:
减少了7 ~ 8MB左右,也不是太明显!不过第4点还是很吸引人的,减少了被攻击的可能。
.NET Framework 4 与 .NET Framework 4 Client Profile的更多相关文章
- 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一 ...
- .NET Framework 4 和 .NET Framework 4 Client Profile
提出这个问题的背景:在新项目中封装了一个DAL来通过EF框架对数据库操作,但是在项目引用后,每当编译时就会出错!更加诡异的是在Web项目和WCF项目中对此DAL引用时就不会出现此问题.作为一个初学者, ...
- .net framework client profile
.NET Framework Client Profile The .NET Client Profile is a subset of the .NET Framework, which was p ...
- 在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Framework 4
在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Frame ...
- .NET Framework 4 与.NET Framework 4 Client Profile有什么区别?
.net framework 自从 2002 年发展至今,已经历了好几个版本,1.0, 1.1, 2.0, 3.0, 3.5 等不同的版本更替,.net framework 的Redistributa ...
- .Net Framework Client Profile 和 .Net Framework的区别[转]
原文链接 VS2010默认是以.Net Framework Client Profile为生成环境的,如果需要更多的功能,应该调用.Net Framework.
- Entity Framework 教程——安装Entity Framework环境
安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...
- MVC5 Entity Framework学习之Entity Framework高级功能(转)
在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...
- MVC5 Entity Framework学习之Entity Framework高级功能
在之前的文章中,你已经学习了怎样实现每一个层次结构一个表继承. 本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时能够利用的高级功能. 在本 ...
随机推荐
- PyQt4 QListview控件使用方法
1.往QListView控件内写入数据 strlist=QStringList()strlist.append('hello')strm=QStringListModel(strlist)self.u ...
- backbone & django csrf_token的问题
由于这个加入了token的验证,因此在backbone调用Model/Collection的save时会失败,错误403.(这里不讨论劫持重发的问题) 解决方案是:修改xmlHttpRequest的h ...
- 自带openJDK,如何切换成Oracle JDK
1.去Oracle官网下载最新的jdk,解压,配置环境变量(直接改 /etc/profile) 参考:http://www.cnblogs.com/aaronhoo/p/5293118.html 2. ...
- C# nullable<T> 用法小结
今天在园子里看到一个关于C#中对于可空类型的描述的帖子,感觉不错于是自己写了个小例子尝试下. 在C#中,对于可空类型描述为:Nullable<T>, 它表示该类型是可以为空的一个类型.它被 ...
- C#错误之 System.Threading.ThreadAbortException:正在中止线程
参考:http://www.cnblogs.com/chendaoyin/archive/2013/06/27/3159211.html 1.开启一个子线程 //开启一个子线程,子线程调用方法 Met ...
- poj 1220(短除法)
http://poj.org/problem?id=1220 题意:进制转换,把a进制转换为b进制. 如果数据不大的话,那么这个题还是很简单的,但这个题就是数据范围太大,所以这里可以采用短除法来做. ...
- Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...
- [ 转] [Android]多式样ProgressBar
多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中. 一般只要在XML布局中定义就可以了. < ...
- Divide and Conquer:Cable Master(POJ 1064)
缆绳大师 题目大意,把若干线段分成K份,求最大能分多长 二分法模型,C(x)就是题干的意思,在while那里做下文章就可以了,因为这个题目没有要求长度是整数,所以我们要不断二分才行,一般50-100次 ...
- IT笔试题
史上最发散的软件工程师笔试题 1.请编写代码实现如下逻辑:有一只猫和多只老鼠,猫叫了一声,老鼠都吓跑了. 2.请介绍一种数据结构和算法,代表你在这个领域的能力. 3.请从正反两面介绍一下你对代码质量的 ...