c#

位置:IT落伍者 >> c# >> 浏览文章

微软.NET 4发布 18个月的明星


发布日期:2019年03月29日
 
微软.NET 4发布 18个月的明星

经过个月的中断上个月下一代NET Framework 和Visual Studio beta 测试版出现在了开发者的工作站第一个—在某些情况下也是唯一的一个—社区技术预览(CTP)出现于去年月微软举办的专业开发人员(PDC)会议上

更新的框架承诺成熟的类库和新的并行处理能力以促进组件的发展还可以充分利用多核系统的密集I/O能力

对于NET 来说我看到的新东西少而更多的是对原有功能—Windows Communication FoundationWindows Presentation Foundation工作流服务—的加强和扩展Gartner公司研究部副总裁Mark Driver说我看到的不是大量新的API而是对版本中所引进的API的改进

Richard Hale Shaw花了他大部分的时间寻找基类库(BCL)和通用语言运行库(CLR)这就是他描述的所谓框架的内容我认为有时[微软]团队在使开发者更加富有成效方面失去了重点现有产品忽视了这一点正在研发的产品在这方面也差强人意Richar Hale Shaw集团公司的首席执行官Shaw说该公司是一家致力于微软开发技术的专业公司

NET 标志着从NET 到CLR的首次重要升级同时推出的还有Visual Studio 和SQL Server 它们充当了NET和NET的执行环境

个月的明星工具

上个月在美国洛杉矶举行的北美微软技术教育大会上微软IT专业人员和开发者仔细分析了NET beta 的新特性事实上Windows 和Windows Server R在会议上吸引了大部分人的注意力R包括NET框架的一个服务器核心选项支持ASPNET IIS 远程管理和PowerShell(NET 是默认框架)Windows Mobile 的第一个版本包含新的Market Place组件在技术教育大会上正式启用与之同时推出的还有NET Compact Framework和SQL Server Compact Edition版

月举行的年度会议结束了自月NET 和Visual Studio 出货以来该工具的明星地位在此期间微软推出了一种全新的数据访问工具—语言集成查询(LINQ)NET 版本的相关供应商以及处于困境的ADONET实体框架它是NET Service Pack(SP)中的一个对象关系映射模型

月下旬举行的PDC上微软向开发者们介绍了即将发布的针对云计算的Azure Services Platform以及新的针对Live Services和Live Mesh的Live Framework

今年微软在MIX网络开发和设计会议上表示将继续支持其基于标准的Web平台该公司展示了ASPNET 中AJAX的改进动态数据和更好的Silverlight的集成并发布了新的模型—视图—控制器(MVC)框架ASPNET MVC 会上微软还宣布Silverlight 以及新的NET RIA服务预计在今年晚些时候推出

所有这些库和SDK都是依赖Visual Studio基本工具支持的NET Framework协议栈的一部分或是扩展微软把这些都纳入了NET的范畴对于大家担心的该框架的尺寸和性能的问题微软表示正在尽力解决NET SPNET Client Profile中引入了一个子框架(MB)而整个的下载量为MB据微软开发者和用户体验平台部门的主管Brian Goldfarb称NET 进一步改进了分布式尺寸

CLR的更新

微软Group项目的项目经理Joshua Goodman认为CLR团队一直在努力解决NET 的性能和兼容性问题该平台的核心包括即时编译垃圾收集安全模式异常处理分析及调试API和BCL

Net 推出以来开发者们在已经共同携手运行了该框架的不同版本NET CLR支持同一主机的并列进程使组件可在同一应用程序中使用CLR的不同版本

如果他们能做到这一点我认为这将是一场重要的胜利Shaw说

为Visual Studio期刊撰写《C# Corner》专栏的SRT 解决方案创始人Bill Wagner也同意这一点这个功能是至关重要的对任一个在办公室里做开发的人来说有了这个功能写插件时就不必再加载到另一个应用程序了

微软的并行故事对本地和外包代码开发者来说是NET 的另一个关键方面并行LINQ(PLINQ)是并行执行查询的一个说明性数据编程模型NET Framework中的任务并行库(TPL)支持任务与(taskand)和数据驱动的并行性协调数据结构(Coordination Data Structure)管理共享状态

开发人员有望在NET beta中看到PLINQTPL和协调数据结构的大量更新在PDC上发布的TPL CTP是基于月以来的代码在Beta TPL默认的工作日程安排变成了现在的NET CLR线程池该团队还正在努力改进算法使NET线程池可以动态优化一个工作任务的线程数量

Shaw认为现在看到的跟他早前看到的CTP一样我有点希望有一个更抽象的东西但他们现在做得也还不错他说迄今为止我唯一不满意的是并行库—当然这是一个小问题因为他们设计并行库的方式使得其利用一些语言特性的机会比较少如扩展方法等等但是语言团队在以后的发布版本中对这方面进行改进也是有可能的他说

目前微软开源项目托管网站CodePlex提供了动态语言运行服务(提供API动态类型系统动态方法和代码生成功能)这也是NET 核心平台的一部分在CLR之上的DLR将支持IronRubyIronPython (去年月发布)C# 还增加了对即将发布的Visual Basic 和Managed Jscript Dynamic的支持

Wagner用过很多动态语言能力他说他喜欢C#的功能我认为这是写代码一个很好的方式基本上是静态输入代码并利用所有性能和编译时间检查静态输入语言的问题而且有办法分离那些你想使用动态类型检查或想插入动态代码的区域他说你可以像在C#里一样使用Silverlight和JavaScript还可以与Python库或IronPython库的供应代码进行互操作

有一个不太常用的用例是你可以通过DLR动态调用NET对象如果你目前是通过映像使用NET对象这将是一个共赢局面Shaw表示

微软的NET中除了动态语言实现这一新框架将第一次支持功能性编程特别是微软研究院开发的F#语言

在此版本中F#将是一个标准语言长期来看我认为这是一个很大的胜利Shaw说 我认为对于那些理解C#的开发者来说它是一个伟大的工具因为用C#进行功能性编程效率不如F#

由微软研究院的Spec#发展而来的技术也包含在了NET 根据微软的Goodman所说BCL中新的Code Contract允许开发者通过编写类似assertdebug的预置条件退出代码和对象常量的后置条件来告诉编译器他们所知道的东西除了MSR之外一些离线静态分析工具也包括在内

又一个数据层

随着对ASPNET的实质改进微软还更新了ADONET的框架类库由于微软内部受不同利益方驱动存在多种框架和工具因此在采用何种数据访问技术上还没有一致意见这方面的混乱让许多开发者感到沮丧微软正在对NET 进行一些改变以使选择变得明朗一些

我们正对实体框架进行大量投资因此对于NET 来说实体框架将成为我们推荐的LINQ到关系场景的数据访问解决方案微软的项目经理Tim Mallalieu在去年月的博客帖子《LINQ到SQL和实体框架(EF)》一文中写道我们正在倾听客户对LINQ到SQL的意见而且也会基于我们从社区收到的反馈意见继续发展该产品

有了NET beta 测试版开发者们很可能会第一次见到EF第据微软称EFv还支持n层API和模板增加了简单传统CLR对象(POCO)覆盖改进了持久化透明以及其它功能

我不知道这是纯粹的POCOOakLeaf Systems公司的负责人及VSM投稿人Roger Jennings说抽象可能有一点漏洞;小部分数据表设计可能仍然在类中

EF设计团队月份声称开发者将对客户端的变更追蹤和n层应用的状态变化进行一定程度的处理

实体框架不会强加模式至N层DTO风格和类似DataSet的经验可以建立在一套最小的API集合上开发者的任务是选择更适合应用的模式

虽然有些开发者可能会赞同其灵活性和更多选择但其他人认为这是更多的工作

我们希望使开发者尽可能地少写低层结构因为他们必须得了解数库模式并且抽象到高层次编程目标是使用实体数据模型(EDM)来操作实体微软开发平台产品管理部门的主任Burley Kawasaki说于是我们做了低层关系数据映射的大量工作完成了你通常会写的很多基础结构代码

今天使用LINQ到SQL的Jennings渴望尝试更新的技术对我来说NET 中最有用的功能是实体框架第主要是因为我将能够对它进行分层他说基本上它们的工作就是使你能够运行一个断开的Web服务于是你就不再需要ADONET数据服务了—你可以去掉这一层

连接到云

微软还改进了NET 中引入的基础库旨在帮助开发人员构建业务逻辑表现层和NET 中的身份管理

面向服务的通讯模型—Windows通讯基础(WCF)现在其功能扩展为可通过Azure服务平台中的NET服务支持云服务

微软正继续改进WCF 和Windows工作流基础(WF)的集成我们正在进行的工作有很大一部分是使WF和WCF之间的编程更加顺畅Kawasaki说我们在开了一个小头你将在NET 中看到我们前进得更远开发人员现在可以在WFWCF和Windows表现基础(WPF)之下使用一致的声明模式(XAML堆栈)

重建WF 已经取得了很大进展一份关于WF的反馈报告指出一些开发人员更愿意使用配置或模型Kawasaki说因此微软正在扩展模式让你可以更多地进行说明性编程在你需要编写代码定义工作流程时尽量限制分支情况

该团队还注重使开发人员不必费力在性能和维护之间做出选择WF 在工作流初始执行的内部基准测试里显示出倍的提高根据Kawasaki所说它用在Visual Studio Team System 的团队基础服务器里

使用该框架和工具构建连接到Web网络和数据服务的综合应用服务应该更加容易 WCF 增加了对RESTful服务的支持使用EDM和RESTful服务开发人员可以调用业务数据而不用写低级别的SQL语句实际上与数据网格数据服务和EF相配合根据Kawasaki所说一个新的Windows Web服务API可以使Windows 和Windows Server R等应用程序的本地代码与WCF进行互操作

WPF 或许是微软最为关键的技术Visual Studio 将使用WPF 内建一个新的shell

许多开发者希望WPF集成到Visual Studio将对WPF的性能和WPF的使用产生积极的影响这不仅仅是一个旗舰应用程序而是一个资源密集型的应用[它]的社区用户更多关心的是其性能而不是其它方面这意味着对IDE和框架进行WPF集成和必要的修改—以及支持它们的WPF库—可能是成功最关键的因素Wagner解释说这与Visual Studio和WPF的命运是休戚相关的

有了NET WPF速度自动提高了%到%Goldfarb说只要向前推进你的应用WPF 将提供多点触摸支持更好的文本和像素显示以及其它功能新的Windows Ribbon Control是从属于Office Fluent UI许可证的

即便如此许多企业开发人员对缺乏WPF控件感到失望这使他们期待第三方选项出现尽管客户一再要求微软还没有计划在框架层面实施MDI解决方案

目前可在CodePlex中获得管理可扩展性框架(MEF)它也包含在了NET 这是一个组件系统它提供了使用插件构建应用程序的标准方式新的Visual Studio 的shell就是建立在WPF和MEF子集的基础上

新一代开发人员

一方面微软继续在企业中推广NET但EF(尤其吸引此类受众)和WPF等关键技术似乎在NET 中尚未完成

对于一些[高端]解决方案来说NET使考虑微软变得更加现实但还存在一个问题 Gartner公司的Driver说当我在年的生命周期内构建一个应用而且是真正运行业务的应用程序我非常积极地维持其稳定—我不想每三年就重写一次代码因为它们又增加了最新的更强大的功能

现在微软可以解决这一遗留问题因为Visual Basic程序平均只持续三至五年突然换到NET会出现新一代开发人员他说

微软的Kawasaki和Goldfarb承认努力为企业开发者提供稳定性同时为那些对最新技术感兴趣的开发人员提供灵活性是一种挑战这也是为什么我们把大量精力放在互操作性上能够扩展现有应用程序并行运行Kawasaki说这是NET的一个核心部分以及大量针对用户应用程序类型的增强功能

Driver认为随着时间推移微软将被迫保持该平台更大范围的稳定我不认为的变化足以解决一个主要问题他说这不是像抛弃东西他们不是重塑CLR的东西但这次我期望有的机构也许会更加积极地更新到最新版本以采取更有规则的方法也许会经历有点回归测试之类的东西

Shaw还预计NET被接受是缓慢的我们已经看到了客户抵制迁移到新框架即使没有新的CLR只有新的库他说他们的IT人员对开发者端的新东西和他们需要支持的服务器端感到惧怕

有了VS /NET 转向新的CLR有很多阻力他回忆说在我看来即使这是一个非强迫性的升级当CLR是干扰你的系统时微软对版本中的奇怪情况进行了非常完整的记录

NET 是一个成熟版本而不像微软推出的一系列其它新框架级组件微软开发者平台产品管理部门的高级主管Steven Martin说

当我们发现开发者反复构建同样的事情我们认为这一点我们可以产品化吗?以帮助他们转移到一个新的开发水平?我们有大量的工作目前正在进行以帮助我们了解一些新的应用模式他说

显然当我们构建的应用软件真正组件化时就是利用云环境中的服务开发者集成其它开发人员创建的服务Martin说我们认为这使我们有机会寻找我们所提供框架内的其它组件关于这点我们以后将有更多讨论

NET 的最终版和Visual Studio 很有可能在月的PDC或明年年初发布无论哪种方式预计NET 年年底前会投放Go Live许可证

Shaw急于抛弃虚拟PC并在常规机器上试用新框架的功能我希望他们这样做beta测试他说因为不然就会拖延发现框架与机器匹配问题的时间

关于作者Kathleen Richards是的编辑和Visual Studio杂志的执行主编

               

上一篇:c#鼠标点击TextBox控件后清空默认字体

下一篇:Java 中LockSupport类在C#中的实现