【原文地址】ASP.NET MVC Preview 3 Release
【原文发表日期】 Tuesday, May 27, 2008 1:26 PM
今天早晨,我们发布了ASP.NET MVC框架的第三个预览版。上个月我曾在博客中详细讨论过包含了这个预览版中诸多变动的一个过渡性源码发布。今天的预览版还包含了不在上个月源码版中的一些另外的功能,一些改进/加工,以及Visual Studio工具集成和文档。
你可以在这里下载集成的ASP.NET MVC第三个预览版的安装包,你也可以在这里下载ASP.NET MVC框架第三个预览版的源码和框架单元测试。
Controller Action方法变动
ASP.NET MVC第三个预览版包含了曾在 四月份MVC源码发布贴子中讨论并预览过的MVC Controller变动,以及另外一些调整。
你可以继续编写返回void,其中封装了逻辑的控制器action方法,例如:
在运行时会显示下列HTML:
第三个预览版现在还支持使用返回一个“ActionResult”对象的方式,该返回对象表示了action方法的结果,允许结果的延迟执行。这可以极大地方便action方法的单元测试(而不必mock什么东西),它还允许更干净的组合以及总的执行控制流程。
例如,我们可以在我们的Browse action方法中使用LINQ to SQL,从数据库中取回一串Product对象,并且表示我们要显示它们的视图。下面的代码会将三个“ViewData”数据传递到视图中,“Title”和“CategoryName”字符串值,和一个强类型的产品集合(作为ViewData.Model对象而传递过去):
使用上述ActionResult方式的一个好处是,它极大地简化了对Controller action方法的单元测试(不用mock)。下面是一个核实上面的Browse action方法行为的单元测试:
然后我们可以在 \Views\Products 子目录中编写一个“Browse” 视图页面,使用由Browse action方法填充的ViewData数据来显示回复:
在访问 /Products/Browse/Beverages URL 时,我们就会得到一个类似下面这样的HTML回复(ViewData的三个用法用红笔圈了出来):
注意,除了支持“ViewResult”回复(表示应该显示一个视图)外,ASP.NET MVC的第三个预览版还添加了对返回“JsonResult”(适用于AJAX JSON序列化场景),“ContentResult”(适用于没有视图的流式内容),以及HttpRedirect 和 RedirectToAction/Route结果的支持。
总的ActionResult方式是可扩展的(允许你创建自己的结果类型),而且不久,你会看到我们添加多个内置的结果类型。
改进的HTML辅助方法
HTML辅助方法在ASP.NET MVC的第三个预览版中做了更新,除了一堆缺陷修补外,它们还包含若干个很好的可用性方面的改进。
自动的数值查询
在早先的预览版发布中,在调用HTML辅助方法时,你总是需要明确地传人要显示的数值。例如,要在<input type="text" value="some value"/>元素中包含一个数值,你需要写:
上面的代码会继续工作,虽然现在你还可以只写:
HTML辅助方法现在在默认情形下,会自动检查ViewData字典以及传人视图的任何Model对象,看是否有一个ProductName键或者同名属性值可用。
SelectList 和 MultiSelectList ViewModels
ASP.NET MVC的第三个预览版包含了新的 SelectList 和 MultiSelectList View-Model 类,这些类提供了一个比较干净的方式来填充HTML下拉框(dropdown)和可多选的列表框(listbox),以及管理象当前的选项这样的东西等等。 一个可更干净地处理表单场景的方法是,在一个控制器action方法中,生成并配置这些View-Model对象,然后将它们在ViewData字典中传到视图中去,来格式化和显示。
例如,在下面,我针对数据库中的独特分类对象的集合创建了一个SelectList view-model类,我表示我要使用“CategoryID”属性作为列表中每个条目的值,用“CategoryName”属性作为显示文字。我还把列表选项设置成我们正编辑的Product当前的CategoryId值:
然后在视图中,我们只要编写下面的代码来表示我们要就我们放入ViewData的SelectList创建一个下拉框:
然后,这会在运行时为我们显示一个下拉框,内含适当的条目和当前的选项:
内置的错误验证支持还没有包括在HTML辅助方法之中(你目前还需要为此编写代码),但会在将来出现,势将更进一步简化编辑场景。
你还会在将来的预览版本中看到ASP.NET AJAX辅助方法,用最少的代码,就可将AJAX轻松地集成进MVC应用中。
URL路径选择的改进
ASP.NET MVC第三个预览版包含了对URL路径选择系统的若干改进。URL路径选择是一个web MVC框架必须弄对的一个最“根本性(fundamental)”的组件,那就是我们在前几个预览版中花了很多精力来将其“钉死”的原因。我们的新URL路径选择引擎将于今夏在.NET 3.5 SP1中发布,将同时支持Web Forms 和 MVC请求。 在运行于.NET 3.5 SP1之上时,ASP.NET MVC将能够使用内置的.NET 3.5 SP1路径选择引擎。ASP.NET MVC也将包含一份相应的程序集,这样它在非SP1系统上也能工作。
第三个预览版中的URL路径选择包括下面一些改进:
MapRoute() 和 IgnoreRoute() 辅助方法
ASP.NET MVC 第三个预览版包括新的MapRoute和IgnoreRoute辅助方法,你可以使用这些方法更轻松地注册路径规则。MapRoute()提供了一个将新的MVC Route规则加到Routes集合中的简易方法,而IgnoreRoute()则提供了一个告诉URL路径选择系统中止处理某些URL模式(例如,ASP.NET中用来提供JavaScript和图像等的.axd资源处理器)的简易方法。
下面是在你创建一个新的ASP.NET MVC项目后,Global.asax中默认的RegisterRoutes()方法的例子,在其中,你可以同时看到这两个新的辅助方法的用法:
MapRoute()辅助方法是重载的,可以接受2个,或者3个,或者4个参数(路径名称,URL句法,URL默认参数,以及可选的URL参数的正则表达式约束)。
你可以调用MapRoute()任意次,来在系统中注册多个具名的路径。例如,除了默认的约定规则外,我们还可以象下面这样加一个名为“Products-Browse”的路径规则:

然后,我们就可以在我们的控制器和视图中,显式引用“Products-Browse”这个规则来生成针对该规则的URL。例如,我们可以使用Html.RouteLink视图辅助方法表示我们要链接到“Products-Browse”路径,在视图模板中使用象下面这样的代码传给它一个“Food”分类参数:

然后这个视图辅助方法就会访问路径选择系统,输出一个象下面这样的HTML超链接(注意它是如何使用路径规则将分类参数自动替换进URL的):

我们也可以在视图中使用新的Url.RouteUrl(routeName, values)方法,如果我们只想要获取一个具名路径的URL的话(而不是输出<a> html元素)。
我们也可以使用Controller基类上的新RedirectToRoute(routeName, values)辅助方法来根据具名的路径规则向浏览器发出重新定向。
更丰富的URL路径映射功能
ASP.NET MVC第三个预览版还支持一堆新的URL路径映射功能,你现在可以将"-", ".", ";"或者任何其他字符用作你的路径规则的一部分。
例如,将 "-" 用作分割字符,你现在可以使用象下面这样的规则,从你的URL中分别分析出语言和locale值:

在调用时,这会将适当的"language", "locale", 和"category"参数传给ProductsController.Browse action方法:
| URL 路径规则 | URL例子 | 传给Action方法的参数 |
| {language}-{locale}/products/browse/{category} | /en-us/products/browse/food | language=en, locale=us, category=food |
| | /en-uk/products/browse/food | language=en, locale=uk, category=food |
或者你也可以在URL的后头使用"."文件扩展类型来决定是以XML还是HTML格式将结果发回:

这会在调用时将“category” 和 “format”参数同时传给ProductsController.Browse action方法:
| URL路径规则 | URL例子 | 传给Action方法的参数 |
| products/browse/{category}.{format} | /products/browse/food.xml | category=food, format=xml |
| | /products/browse/food.html | category=food, format=html |
ASP.NET MVC的第三个预览版还支持通配符路径规则(在第二个预览版中就有了)。 例如,你可以在一个规则中表示要将所有剩下的URI内容作为一个具名参数传给一个action方法:
这会在调用时将“contentUrl”参数传给WikiController.DisplayPage action方法:
| URL路径规则 | Example URL例子 | 传给Action方法的参数 |
| Wiki/Pages/{*contentUrl} | /Wiki/Pages/People/Scott | contentUrl="People/Scott" |
| | /Wiki/Pages/Countries/UK | contentUrl="Countries/UK" |
这些通配符路径在建造博客,维客或者其他基于内容的系统时会非常有用。
结语
今天发布的ASP.NET MVC的第三个预览版包括了一堆改进和加工。我们开始对URL路径选择和MVC的Controller/Action编程模型感到满意,感到那些方面“烧制”得非常好(bake really well)。在将来的预览版中,你将会开始看到编程模型stack上更多比较高层次的改进,象视图(html辅助方法,验证辅助方法等等),AJAX,子控制器和站点构成,更深入的登录,认证,授权和缓存集成,以及数据scaffolding支持等方面的东西。
我还将发表上个周末开始撰写的一个非常长的教程贴子,演示如何使用ASP.NET MVC的第三个预览版来建造应用,希望在最近几天内写完。这应该对ASP.NET MVC提供一个很好的介绍,以及对所有的东西是怎么协作的帮着提供一些上下文,如果你对使用ASP.NET MVC感兴趣的话。
希望本文对你有所帮助,
Scott
【原文地址】Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta
【原文发表日期】 Monday, May 12, 2008 9:51 AM
今天早些时候,我们发布了.NET 3.5 SP1 和 VS 2008 SP1的公开beta版,这些服务更新提供了自11月份我们发布这些产品之后所报告的问题的缺陷修补以及性能改进的累积结果,内中还包含了若干新功能和功能增强,势将进一步完善.NET应用的建造(其中的一些细节请见下文)。
我们计划在今夏,作为免费更新,同时发布.NET 3.5 SP1 和 VS 2008 SP1的最终版本,你可以在这里下载和安装这些beta版。
SP1 Beta安装重要注意事项
今天发布的SP1 beta版还处于beta状态,所以你在重要的机器上安装时千万要慎重,下面是几个你需要知道的非常重要的SP1 Beta安装注意事项:
1) 如果你目前正运行Windows Vista的话,你应该确定在尝试安装 .NET 3.5 SP1 Beta之前安装了Vista SP1。如果运行 Vista RTM版本的话,安装.NET 3.5 SP1会有一些问题,这些问题将会在.NET 3.5 SP1的最终版中得到解决。到那之前,请确定在安装.NET 3.5 SP1 beta之前安装Vista SP1。
2) 如果你在你的机器上安装了VS 2008 Tools for Silverlight 2 Beta1安装包,你必须在安装VS 2008 SP1 Beta之前先卸载它,同时还必须卸载VS 2008的KB949325更新否则你的安装会失败。你可以在这里找到可以遵循的确切步骤的更多细节(注:你必须分开卸载这两样东西)。 在你机器上同时拥有Silverlight 2 运行时和.NET 3.5 SP1是没问题的,需要卸载的组件是VS 2008 Tools for Silverlight 2安装包。我们将在几个星期后发布可在VS 2008 SP1 beta下工作的VS 2008 Tools for Silverlight更新包。
3) .NET 3.5 SP1 beta版的一个行为变化会给Expression Blend的正式版造成问题。这个行为变化将会在.NET 3.5 SP1的最终版中恢复过来,到那时,Blend的所有版本运行起来都不会有问题。在那之前,你需要下载这最近更新过的Blend 2.5版本绕过这个问题。
Web开发之改进
.NET 3.5 SP1 和 VS 2008 SP1 内含一堆针对web应用开发的功能改进。
关于特定于VS方面的工作(包括具体的缺陷修补细节),VS Web Dev Tools开发团队在这里提供了细节。下面是web空间的一些工作的细节:
ASP.NET Data Scaffolding 支持 (ASP.NET 动态数据)
.NET 3.5 SP1添加了对一个丰富的ASP.NET 数据"scaffolding"框架的支持,该框架允许你很快地建造工作的数据驱动的web应用。使用ASP.NET 动态数据的功能,你可以自动地对各种数据对象模型(包括LINQ to SQL, LINQ to Entities, REST Services, 以及任何其他的ORM或者由动态数据提供器提供的对象模型)建造web UI(包含完整的CRUD,创建,读取,更新,删除的支持)。
SP1往ASP.NET中现有的 GridView, ListView, DetailsView 和 FormView控件中添加了这个新功能,提供了智慧的验证和灵活的数据模板选项,它还提供了智慧的新过滤性服务器控件,以及支持自动traverse主键/外键关系,显示友好的外键名称,所有这些都会给你省下成堆的代码。
你可以在Scott Hanselman这里的录像和教程中了解到关于该功能的有关细节。
ASP.NET 路径选择引擎(System.Web.Routing)
.NET 3.5 SP1包含了一个灵活的新URL路径选择引擎,它允许你把进来的URL映射到路径处理器上去。它包含了对从干净的URL(例如, /Products/Browse/Beverages)中分析出参数的支持,以及对从路径注册中动态计算和生成新的URL的支持。
这个新的路径选择引擎为ASP.NET动态数据,以及新的ASP.NET MVC框架所用,它将同时支持基于WebForms和MVC的请求。
ASP.NET AJAX 倒退/前进按钮历史支持
.NET 3.5 SP1 往 ASP.NET AJAX中加了新的API,允许你更好地控制浏览器的历史列表(允许你控制浏览器的倒退/前进按钮的行为)。
你可以在这里的文章,以及这里的screencast中了解有关这个功能的细节。
ASP.NET AJAX 脚本合成支持
.NET 3.5 SP1 在<asp:ScriptManager>服务器控件上引进了一个新的<CompositeScript>元素,它允许你用声明的方式在其中定义多个脚本引用。在CompositeScript元素中的所有脚本引用,会在服务器上合成起来,以单个脚本的行为提供给客户端,减少了对服务器的请求数目,改进了ASP.NET AJAX应用的页面装载时间。
这个脚本合成功能支持基于路径的脚本以及基于程序集资源的脚本,是使用ScriptResources.axd处理器动态地提供合成的脚本的。
Visual Studio 2008性能改进: HTML 设计器 和 HTML 源码编辑器
二月份时,我们发布了一个热补累积版,其中包含对VS 2008 Web设计器的若干性能改进和缺陷修补,VS 2008 SP1包括了所有这些修补,还提供了若干额外的性能改进。
Visual Studio 2008 JavaScript脚本格式化和代码设置
Visual Studio已经有好几个版本支持丰富的VB和C# 源代码格式化选项(间距,换行,大括号位置等等)。
VS 2008 SP1对 JavaScript(<script> 代码块和.js文件)也提供了丰富的源代码格式化支持,你现在可以使用工具->选择对话框来配置你的Javascript编程设置:
这些设置将会在你在源码编辑器中键入新的Javascript代码时自动采用,你也可以选择现有的代码,右击,选择“格式化选择部分”选项来对现有Javascript代码施用你的样式设置。你可以在 这里了解到有关这个新功能的细节。
Visual Studio 对多个 Javascript/AJAX 框架更好的Javascript Intellisense支持
VS 2008 在源码视图中包含了对Javascript Intellisense 的支持。 初始VS 2008版本的intellisense,很好地支持原生的JavaScript,以及使用ASP.NET AJAX JavaScript 类型模式编写的代码。 但JavaScript是门非常灵活的语言, 许多JavaScript库充分利用了这灵活性,来实现他们各自的功能,但有时候其实现方式妨碍了intellisense引擎提供代码完成的支持。
VS 2008 SP1对流行的JavaScript库添加了更棒的intellisense支持,特别地,我们花了功夫支持JQuery, Prototype, Scriptaculous, ExtJS, 以及其他流行的库。在你引用这些库时,你会得到默认的intellisense。 我们还在研究是否可以对一些比较流行的库维护另外的intellisense提示文件,你可以下载这些文件以得到更好的intellisense和文档支持。
下面是一个在VS 2008 SP1 JavaScript intellisense引擎中使用JQuery起始函数的例子:
注意下面VS 2008 SP1现在即使是在连串的JQuery选择器上也能提供方法参数完成:
Visual Studio对ASP.NET项目中WCF服务的重构支持
VS 2008 SP1对包含在ASP.NET Web Site 和 ASP.NET Web Application项目中的 WCF 服务添加了更好的重构支持。
假如你使用重构支持,对WCF服务重新命名类名,接口契约,或者命名空间,VS 2008 SP1现在将会自动地修正web.config和引用它的SVC文件。
Visual Studio对经典ASPIntellisense和调试的支持
Visual Studio的早期版本包括了对经典ASP(.asp)网页中intellisense和调试的支持,但VS没有创建经典的ASP网页/项目的文件和项目模板已经有几个版本了。在初始的VS 2008中,我们不正确地假设这意味着大家不在使用经典ASP的支持了,但我们在发布VS 2008之后听到了反馈说人们实际上还在使用。
在VS 2008 SP1中,对经典ASP intellisense和调试的支持又回来了:
Visual Web Developer Express 版对类库和Web Application项目的支持
免费的Visual Web Developer 2008 Express 版也在SP1中作了更新,加了对类库和ASP.NET Web Application项目类型的支持。Visual Web Developer Express版的早期版本只支持ASP.NET web-site项目。
此外,对类库和web应用项目的支持还将允许你在免费的Visual Web Developer 2008版中建造ASP.NET MVC和Silverlight项目。上面所有的JavaScript,动态数据,经典ASP, 以及 AJAX改进都将在Visual Web Developer Express版中工作。
对客户端开发的改进
.NET 3.5 SP1 和 VS 2008 SP1包含了针对客户端应用开发的重大的性能,部署,和功能改进。
Tim Sneath在这里有一篇精彩的博客贴子,讨论了其中一些客户端开发方面的改进,下面是相关的细节:
应用启动和Working Set性能改进
.NET 3.5 SP1 包括了对CLR的非常重大的性能改进,将导致极其快速的应用启动,特别是在“冷启动”的场景下(指目前没有任何.NET应用在运行)。这些得益大部是通过改变CLR NGEN文件中的块布局,以及通过极大地优化IO访问模式来取得的。我们还将对我们的JIT代码生成器做一些很好的优化,以允许使用结构体的方法的更好的行内化。
今天,在安装SP1后,对大型的.NET客户端应用的测量,我们发现启动的速度之提高几达百分之四十,这些优化在某些情形下还有将ASP.NET 应用每秒请求的吞吐量提高了至百分之十的副作用。
新的New .NET 框架客户端Profile安装包
.NET 3.5 SP1还给建造.NET客户端应用的开发人员引进了一个被称为“.NET Framework Client Profile”的新安装包选项,它提供了一个新的安装程序,能在还没有安装.NET框架的机器上提供更小,更快,和更简单的.NET客户端应用的安装体验。
.NET Framework Client Profile安装只包括了.NET框架中常用于客户端应用场景的那些程序集和文件。例如,它包括了Windows Forms, WPF, 和 WCF,并不包括ASP.NET和那些主要用于服务器场景的那些库和组件。我们预期这个安装包的大小大概在26MB左右,比之完整的.NET框架安装包,下载和安装将快很多。
.NET Framework Client安装包中的程序集和APIs跟完整的.NET框架安装包中的那些程序集和APIs是百分之百一样的,这意味着应用可以定向于NET 3.5 SP1的Client Profile和完整的Profile,不需要做重新编译。在.NET Client Profile安装包下工作的所有的 .NET应用,在完整的.NET框架下也自动工作。
开发人员可以在VS 2008 SP1中调出客户端应用的项目属性页来指定他们建造的客户端应用同时支持.NET Framework Client Profile和完整的.NET框架。在项目属性页上,他们可以选择一个新的复选框,表示它只需要包含在.NET Framework Client Profile中的那些程序集:
VS 2008然后就会确认项目只引用了发布在Client Profile安装包中的那些程序集,如果你尝试使用一个不在Client Profile中的程序集中的一个类型的话,它就会产生一个编译错误。编译好的客户端应用然后就可以在安装了完整的.NET框架的机器,以及只安装了.NET Framework Client Profile的机器上运行。
如果你有一个机器,只安装了.NET Framework Client Profile,你在上面尝试运行一个没有标记支持.NET Framework Client Profile的.NET应用的话,CLR会拒绝运行这个应用,它会提示终端用户更新到完整的.NET框架安装包。这确保应用总是可以正确地运行,开发人员不用操心在运行时遭遇缺失程序集的错误,如果用户尝试在一个只安装了.NET Framework Client Profile的机器上运行一个需要完整的.NET框架的应用的话。
我们认为很大类的.NET客户端应用将能够使用这个新的.NET Client Profile安装来显著地加速它们的安装,促成友好得多的消费者体验。
针对客户端应用的新.NET Framework Setup Bootstrapper
.NET 3.5 SP1 引进了一个新的bootstrapper组件,你可以用在客户端应用中来帮助自动确认机器上安装有正确的.NET框架版本。
这个bootstrapper组件负责自动地从Internet上下载和安装.NET Framework Client Profile或完整的.NET框架安装包,假如你的机器没有安装这2者的话。这个bootstrapper还自动地负责升级安装了早期.NET框架版本的机器。例如,假如你的机器已经安装了.NET 3.0,而你的应用要求.NET 3.5,这个bootstrapper可以只下载将其升级到.NET 3.5的那些更新文件,从而避免下载完整的.NET框架安装包。
这个安装bootstrapper组件可以用于基于ClickOnce的安装包,也可以用于第三方的安装产品(象Installshield)。这个boostrapper可以促成完全定制的安装品牌体验(象闪屏,定制的安装向导步骤等等),应该极大地方便建造优化的客户端安装体验。
ClickOnce客户端应用部署的改进
.NET 3.5 SP1包括了针对Windows Forms和WPF应用的ClickOnce部署的若干改进。其中一些改进包括:
- 对.NET Framework Client Profile的支持(支持所有的ClickOnce功能)
- ClickOnce应用现在可以在显示一个定制的品牌安装界面的同时,以编程的手段通过一个Setup.exe来安装
- ClickOnce对生成MSI + ClickOnce应用包的改进
- ClickOnce错误对话框现在支持链接到Web上特定于应用的支持网站
- ClickOnce现在对配置文件关联有了设计时支持
- ClickOnce应用出版商现在可以根据场景需要决定是否取消对ClickOnce manifest的签名和哈希化
- 企业现在可以选择是否只运行被“已知出版商”Authenticode签名过的Clickonce应用,而禁止其他应用的运行
- FireFox浏览器扩展将支持通过FireFox浏览器安装Clickonce应用
Windows Forms控件
SP1 添加了若干新的Windows Forms控件,包括新的矢量形状,打印, 以及DataRepeater控件:
WPF 性能之改进
.NET 3.5 SP1包括了若干WPF的显著性能优化和改进,其中一些具体的图形方面的改进包括:
- 更平滑的动画效果
- Blur和DropShadow位图效果的硬件加速渲染
- 文本渲染的速度改进,特别是VisualBrish和3D镜头
- 2D图形改进,特别是z-index场景
- 一个新的WriteableBitmap类,将允许实时和无撕裂效果的位图更新,这将促成定制的“绘制”风格的应用,数据视觉化,和那些避开默认的WPF 2D图形APIs的图表。
- 分层的视窗性能改进
SP1还在WPF中加了更好的数据扩缩性。ListView, ListBox 和 TreeView 控件现在支持“个项容器回收(item container recycling)”和“虚拟化(virtualization)”,允许你在卷动的场景下轻松地得到百分之四十的性能改进。这些控件现在还支持“延缓卷动(deferred scrolling)”的功能,它允许你避免实时卷动,而是等到用户放开卷动按钮时才卷动(Outlook中的默认卷动模式),这在对非常大的数据集快速卷动时会非常有用。
WPF的数据改进
.NET 3.5 SP1包括了针对WPF的若干数据绑定和编辑改进,它们包括:
- 在{{ Binding }} 表达式中的StringFormat支持,以促成绑定值的简易格式化
- 对继承自ItemsControl的控件中的新的交替行支持,方便在行上设置交替属性(例如,交替的背景颜色)
- 对可编辑的控件中的null值的更好的处理和转换支持
- 可以将验证规则施用于整个绑定个项的个项层次的验证
- MultiSelector支持,以处理多个选择(multi-selection)和大块编辑场景(bulk editing scenarios)
- IEditableCollectionView支持将数据控件接连到数据源,允许以事务的方式进行编辑/添加/去除个项
- 在绑定到IEnumerable数据源时的性能改进
WPF现在还提供了钩子,允许开发人员编写支持虚拟化卷动方式的定制面板。我们将把这个支持与上面的数据绑定改进一起使用来建造将在今年稍后发布的新WPF datagrid。
WPF可扩展的Shader效果
.NET 3.5 SP1在WPF中添加了对一个新的shader效果架构和APIs的支持,它允许你创建极有表现力的视觉效果并将其施加到WPF中的任何控件和元素上。这些shader效果支持多个输入组合的混合,使它们强而有力的是WPF是使用GPU来运行这些效果的(包括你自己建造的定制效果),给与你完全的硬件加速图形性能。几乎跟WPF中的每样东西一样,你还可以在效果的属性上使用WPF数据绑定和动画效果,将它们完全整合到一种体验之中。
将一个效果施用到一个控件上是极其容易的事,只要设置控件的Effect属性就可以了。例如,要将一个硬件加速的drop-shadow效果用到一个按钮上,你可以通过代码或XAML在按钮上使用内置的<DropShadowEffect>:
这将导致按钮象这样渲染:
因为效果是可扩展的,开发人员可以创建他们自己的自定义的Effect对象,然后使用它们。例如,可以创建一个自定义的DirectionalBlurEffect,将它加到ListBox控件上,在你快速卷动时,改变它的卷动外观,使用一个模糊效果:
留意Greg Schechter的博客,了解Effects架构的工作原理的细节,以及学习如何在你的应用中创建和施加新的效果(他的第一组贴子在这里)。
注: 除了引进新的Shader效果API外, SP1中的WPF还更新了现有的Blur和DropShadow Bitmap效果以支持硬件加速。
WPF与Direct3D的互操作性
.NET 3.5 SP1加了支持,把Direct3D有效地集成进WPF,这让你可以对硬件更直接的访问,可以在WPF应用中充分利用Direct3D API。你将能够把Direct3D内容当作应用中的图像一样处理,以及使用Direct3D内容作为WPF控件的纹理。
例如,下面是Direct3D SDK中的三个例子:
我们可以在一个WPF应用中把它们载入图像表面,或将它们映射成WPF控件的纹理。下面是将它们在一个WPF 3D应用中映射成立方体的纹理的例子:
注: Direct3D集成还不在今天的SP1版本中,但将在SP1的最终版中。
VS 2008对WPF的改进
VS 2008 SP1包括了对WPF项目和WPF设计器的若干显著的改进,这些包括:
- 若干性能改进
- 在属性浏览器中的事件页支持
- 在属性浏览器中对属性按字母排序的能力
- 显著加快表单布局的Margin snaplines
- 对TabControl, Expander,和 Grid的更好的设计器支持
- 在代码中开始的重构现在会更新你的XAML(包括XAML中的控件声明和事件声明)
- “Go to Definition” 和 “Find All References”现在支持声明在XAML中的东西
SP1中的调试器也被更新了,XAML标识中的运行时错误(例如,应用的样式,数据源以及其他不存在的对象),现在将更容易在调试器中识别:
Data开发的改进
.NET 3.5 SP1 和 VS 2008 SP1 包括对数据开发的一堆改进,其中的一些包括:
SQL 2008 支持
VS 2008 和 .NET 3.5 被更新到包括对即将发布的SQL 2008的支持,Visual Studio 2008数据设计器,项目和向导现在完全支持连接和操作SQL 2008数据库。
ADO.NET 实体框架和LINQ to Entities:
.NET 3.5 SP1 包括了新的ADO.NET实体框架,该框架允许开发人员对他们的关系数据定义较高层次的视图数据对象,然后通过这个模型进行编程。象继承,复杂类型和关系(包括多对多支持)等概念可以用该框架来建模,VS 2008 SP1现在包括了内置的设计器支持来帮助这样的建模:
ADO.NET实体框架和VS 2008实体框架设计器现在同时支持可插拔的提供器模型,允许它们可以用于任何数据库(包括Oracle, DB2, MySql, PostgreSQL, SQLite, VistaDB, Informix, Sybase和其他数据库)。
然后,开发人员可以使用LINQ 和 LINQ to Entities 来查询,操作和更新这些实体对象。
ADO.NET 数据服务(原代号名为Astoria)
.NET 3.5 SP1包括了允许创建基于REST的数据服务的灵活框架。原代号为Astoria,ADO.NET 数据服务框架(Data Services framework)提供了这样的支持,可以通过标准的REST URI句法来发布数据,使用标准的HTTP动词来操作数据资源。开发人员可以轻松地呈现使用ADO.NET实体框架创建的数据模型,以及使用可插拔的提供器模型来呈现其他数据模型。
除了发布数据源外,该框架还加了可以操作远程REST服务的客户端API,包括在这客户端API中的是一个允许对REST服务进行远程查询的LINQ库。
WCF 开发之改进
.NET 3.5 SP1 和 VS 2008 SP1 包括了对WCF开发的若干增强,其中一些增强包括:
- 在Web主机应用场景中的显著扩缩性改进(5到10倍)
- 支持在WCF契约中使用ADO.NET实体框架
- DataContract Serializer,UriTemplate 和 WCF web 编程模型的API可用性改进
- VS 2008 SP1 中增强的TestClient 支持
- VS 2008 SP1 中对WCF 服务项目的新Hosting向导
- 在部分信任场景下的改进的调试支持
VB 和 C# 改进
VB 和 C# 开发团队在VS 2008 SP1也加了一些非常好的改进:
Visual Basic
你现在可以往Visual Basic项目中加入“XML to Schema”条目,在加了这些项目条目外,会打开一个向导,允许你根据各种XML源来创建XSD数据定义集。然后,这个数据定义集就会加到项目中,促成VB XML intellisense。这个支持以前可以通过一个web下载来获取,你可以在这里了解有关详情。
VS 2008 SP1中还包括了一个XSD浏览器, 允许你浏览XSD数据定义集。在SP1的最终版中,开发人员将能够右击VB代码编辑器中的XML元素名称(无论是在XML属性中还是XML明文中),选择“Go To XML Schema Definition”,这会打开XSD浏览器,显示VB项目的数据定义集(同时选择当前元素)。
C#
C#代码编辑器现在能够识别以前需要明确编译才能识别的许多语义代码问题,在它们下面显示红色曲线以示错误。例如,如果你在目前的C#代码编辑器中试着声明和使用一个未知的类型的话,在编译之前,你不会看到编译错误。但在SP1中,你会马上看到表示错误的红色的曲线(不需要明确的编译)。
VS 2008 SP1中的调试器还作了改进,对在调试时估算LINQ表达式和查看结果集提供了更多的调试支持:
启用LINQ的数据源在调试器查看窗口中将显示一个“结果视图(Results View)”节点,将这个节点展开,将对LINQ表达式进行运算,允许你查看它返回的实体对象:
Team Foundation Server 的改进
TFS 2008 SP1 包括了许多改进,请阅读Brian Harry的Team Foundation Server 2008 SP1 预览博客贴子以了解详情。
结语
.NET 3.5 SP1 和 VS 2008 SP1 提供了一堆缺陷修补,性能改进和额外的功能增加,将更完善对所有类型的.NET应用的开发,这将是一个完全兼容的服务包版本。
我们计划在今夏以免费更新的方式发布.NET 3.5 SP1和VS 2008 SP1的最终版本,你现在可以在这里下载和使用这个beta版本。
希望本文对你有所帮助,
Scott