2023年12月29日发(作者:)
微软VisualStudio2008的基本情况VisualStudio一直是广大程序员所关注的重要的软件开发平台。目前,大家可以从微软网站下载VisualStudio2008bate2版本。此次大会中,微软.NET咨询顾问周敏向大家介绍了微软VisualStudio2008的基本情况和开发语言的增强等情况。功能上的增强目前,微软的VisualStudio团队、SQLServer团队、Office团队都在使用TeamFoundationServer进行企业级的应用开发。VisualStudio2008的设计目标主要有3点:提高开发效率、在开发过程生命周期中使团队成员能够更好的协作、能够开发基于微软最新技术的一些应用。VisualStudio2008支持.NETframework3.5,并且对以前.NETframework版本进行支持。同时,在VB3.5和C#3.5中加入了对LINQ的支持。LINQ使用户能够使用VB和C#编写出类似于SQL语句这样的指令,使得开发语言和数据库语言彼此能够结合起来。以前的SQL语言检索能力很强,但是并不擅长进行复杂的运算。现在VB和C#能够获取数据,并且能够对数据进行复杂的运算。这也是在VisualStudio2008中引入LINQ技术的原因。在软件过程管理中,VisualStudio2008引入了CODEMATRIX,可以测量代码的复杂度,对代码的性能进行定量的分析,从而对代码的优劣有一个比较深入的了解。此外,在VisualStudio2008中引入了新的负载测试的模型、界面和报表。更重要的是,还有一个连续集成的构建,例如,一个企业有一个开发主线,还有很多开发分支。假定每个开发分支都是其中的一个功能点,当功能点开发完成以后,需要合并到开发主线,在对开发主线进行合并操作的时候,VisualStudio2008能够自动进行团队构建,并且给出构建的结果。而在VisualStudio2005时,需要进行很多手工操作。WPF是微软最新的表示层框架,可以使用户在开发应用程序时,所有的界面都是统一的。WPF具有非常强的3D处理效果。语言上的增强在VisualStudio2008的C++语言当中,MFC可以支持Vista的通用控件。VisualStudio2008还支持智能感应,除此以外,对于AJAX引入了很多扩展控件,从
而可以快速开发X的应用。新的VistaSDK中包含大量的非托管API。UAC(用户访问控制)是Vista的一种访问控制机制,主要是防止病毒对系统的破坏。VisualStudio2008中的VB语言不但可以获取数据,并对数据进行复杂的运算。此外,对XML的处理也更加方便。同时,VB集成开发环境的开发效率有了大幅度提高,变得更加智能。VisualStudio2008整合了对象、关系型数据、XML的访问方式,语言更加简洁。高效开发使用VisualStudio2008可以高效开发Windows应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时VisualStudio2008支持项目模板、调试器和部署程序。使用Expression交互式设计器可以无缝集成设计人员与开发人员的工作流程。VisualStudio2008可以高效开发Web应用,集成了X1.0,包含X项目模板。此外,它还可以高效开发Office应用和Mobile应用。什么是LINQLINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询。LINQ的目标是降低访问数据的复杂度。LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用,能够更好地与编成模型集成,可以在VisualStudio中进行智能提示。LINQ可以为SQLServer提供对象到关系的映射。此外,LINQ可以将单个类映射到多个表或视图,可以进行存储查询和实体查询VisualStudio2008可自动执行WCF手动任务,包括更新代理引用和消除重复任务(例如创建简单托管项目)。VisualStudio还能解决跨目标和数据协定类型共享等一些困难问题。在本专栏中,我将逐步介绍其新功能及优势,并对其任何缺陷和解决方法做出解释。尽管我将在此使用C#项目设置,但除非我另行说明,否则所有设置同样适用于VisualBasic®。
.NETFramework跨目标VisualStudio的早期版本通常针对随其一起提供的.NETFramework版本。例如,VisualStudio2005只能生成针对.NETFramework2.0的程序集,而此惯例并不能反映大多数开发人员所面临的真实情况。通常,开发人员需要在维护针对早期版本的.NET而编写的旧版应用程序的同时,还要在其新版应用程序中使用新版VisualStudio。此外,此惯例还意味着开发人员在维护为早期版本的.NETFramework而编写的应用程序时,无法从效率增强功能(例如VisualStudio2005中引入的代码重构支持)中获益。问题在于.NETFramework各版本不支持跨目标功能。您要么必须安装多个版本的VisualStudio,要么使用独立的测试和部署内部版本进行补偿。VisualStudio2008尝试通过为多个版本的.NETFramework提供充分支持(虽然不完美)来解决这一问题。由于实际上.NETFramework3.0和.NETFramework3.5使用的CLR版本与.NETFramework2.0使用的相同,唯一的区别在于新引用的程序集,因此VisualStudio仍可针对相同运行库,而为.NETFramework版本2.0、3.0和3.5(其中.NETFramework版本号对应的是发行版本,而不是运行库版本,运行库版本仍为CLR2.0)提供跨目标功能。在VisualStudio2008中,“Properties”(项目)的“Application”(应用程序)窗格包含一个称为“TargetFramework”(目标框架)的新组合框,通过该组合框您就可以针对.NETFramework版本2.0、3.0和3.5(参见图1)。
图1VisualStudio2008中的目标框架属性(单击该图像获得较小视图)图1VisualStudio2008中的目标框架属性(单击该图像获得较大视图)TargetFramework值仅在开发时有效,而在运行时无效(您的程序集仍指向.NET2.0CLR)。您选择的值表示您构建程序集时可针对的.NETFramework的最早版本。新项目默认被配置为针对.NETFramework3.5。如果添加引用,则会变得有些复杂;如果在引用较高版本程序集时,降低TargetFramework版本,VisualStudio2008将提示您引用出错和内部版本失败。VisualStudio2008不允许您向其所需Framework版本高于现有项目的.NETFramework程序集添加引用。如果您向版本更高的同一解决方案中的其他项目添加引用,VisualStudio2008将警告您可能会发生冲突。如果通过浏览程序集来添加引用,VisualStudio2008将不会干预您进行操作。在语言和跨目标方面,请注意,您可以在C#中(而不是VisualBasic中),通过限制编译器版本来限制使用.NETFramework2.0或3.0项目中诸如匿名类型和扩展方法等功能。您可以转至“Build”(内部版本)窗格,然后单击“Advanced”(高级)按钮,并选择“ISO-2(C#2.0)”作为语言版本(而不是尚未标准化的默认版本)来执行此操作。在VisualStudio2008中打开VisualStudio2005WCF项目时,升级过程中框架版本保持为2.0。实际上这可以正常运行(请记住,基础运行库版本并未改变),但我建议根据需要手动将其设置为版本3.0或3.5。使用新项目模板时,TargetFramework版本是最重要的因素。WCF工作流和整合项目必须针对.NETFramework3.5进行构建;ServiceLibrary项目要求针对.NETFramework3.0或3.5。“AddServiceReference”(添加服务引用)功能仅当为项目选择Framework版本3.0或3.5时可用,本专栏稍后将介绍此功能。
WCF提供的主机VisualStudio2008附带了一款名为的现成的通用服务主机。它位于C:ProgramFilesMicrosoftVisualStudio9.0Common7IDE中。为了方便使用,我建议将该位置添加到系统的Path变量中。WcfSvcHost是一种简单的命令行实用工具,可接受两个参数:一个是指向包含一个或多个服务类的.NET程序集的文件路径,另一个是指向托管.config文件的文件路径。例如:/service:/config:指定的服务程序集可以是类库程序集(DLL),也可以是应用程序程序集(EXE)。WcfSvcHost将启动一个新进程,该进程将自动托管指定.config文件的服务部分中列出的所有服务类。请注意,这些服务类及其服务约定和数据协定不必是公共类型,可以是内部类型。此外,自动托管的服务不需要提供任何元数据,但是它们可以发布元数据(如果选择发布)。WcfSvcHost是一种以桌面任务栏图标驻留的Windows窗体应用程序。若要关闭主机,只需从任务栏图标上下文菜单中选择“Exit”(退出)即可。使用这种方式终止托管不太妥当,因为WcfSvcHost将中止当前正在进行的所有调用,客户端很可能会收到异常。如果单击WcfSvcHost任务栏图标,将出现一个对话框,其中列出托管的所有服务(参见图2)。图2WcfSvcHost服务列表(单击该图像获得较小视图)图2WcfSvcHost服务列表(单击该图像获得较大视图)该对话框还显示服务的状态及其元数据地址,您可以将这些信息复制到剪贴板,稍后向服务添加引用时可能会用得到。关闭WcfSvcHostUI只是将其折叠回任务栏。WcfSvcHost的目的就是在开发过程中不再需要使用独立托管程序集来配合服务库。诸如托管项目等的开发工作是一种重复任务,这些主机通常包含大量相同的代码行,当有多个服务库时,这些重复代码容易导致解决方案变得臃肿。为了便于开发和测试,可以将WcfSvcHost直接集成到您的VisualStudio2008服务库项目中。在项目属
性的“Debug”(调试)窗格中,将指定为要启动的外部程序,然后将您的类库名及其.config文件(自动生成并自动复制到bin文件夹)指定为参数。完成后,当您运行类库(完成上述操作后才能执行运行)时,它将借助该进程附带的调试器由WcfSvcHost自动托管。停止调试时,VisualStudio2008将以不妥当的方式中止托管。您甚至可以在.NETFramework3.0应用程序中与VisualStudio2005项目一起使用WcfSvcHost,由于WcfSvcHost只需要.NETFramework3.0,因此只需从安装了VisualStudio2008的计算机上复制WcfSvcHost即可。为了使用更加方便,建议您将WcfSvcHost添加到.NETFramework3.0计算机上的全局程序集缓存(GAC)中。WcfSvcHost的最后一个功能是能够自动启动客户端应用程序,甚至能够为客户端提供特定于该应用程序的可选参数:/service:/client:/config:/clientArgs:123,ABC此功能对于在自动测试、甚至是简单部署的情况下启动主机和客户端非常有用。WcfSvcHost的最大缺陷是只适用于简单情况,例如在打开主机实例之前无需以编程方式访问主机实例的情况,或在其打开之后以编程方式访问其事件模型的情况。与使用IIS或WindowsActivationService(WAS)进行托管不同,WcfSvcHost没有对等的服务主机工厂支持。因此,不具备动态添加基址、配置终结点、中止调用以及在主机级别配置自定义行为等功能。通过我对WCF的使用体验发现,除了最简单的情况之外,所有其他情况中最终都需要以编程方式访问主机实例,因此我并不将WcfSvcHost视为一种成熟、高效的主机,而我自己执行WAS或进行专用自托管。WCF提供的测试客户端除服务主机外,VisualStudio2008还随附了一个用于进行基本测试的简单通用的测试客户端,您可以使用它调用大多数服务上的操作。正常安装后,测试客户端位于,isfoundafternormalinstallationatC:ProgramFilesMicrosoftVisualStudio9.0Common7IDE下。您必须为WcfTestClient提供一个命令行参数,其中包含要测试的服务的元数据地址:
p://localhost:9000/您可以指定任何元数据地址,例如HTTP-GET或者HTTP、TCP或IPC(命名管道)上的元数据终结点。也可以指定多个元数据地址:p://localhost:8000/://localhost:9000/MEXWcfTestClient是一个WindowsForms3.5应用程序(参见图3)。在此图中,左侧的树控件包含测试的服务及其终结点。您可以详细查看某个终结点的约定并选择某项操作。特定于该调用的信息将显示在右侧窗格的选项卡中。图4所示为一个简单约定及其实现的示例。图3使用WcfTestClient(单击该图像获得较小视图)图3使用WcfTestClient(单击该图像获得较大视图)您可以在方法选项卡的“Request”(请求)部分中输入作为操作参数的一个整数和一个字符串,如图3所示。单击“Invoke”(调用)按钮时,它将向服务调度调用,并在“Response”(响应)中显示返回值或输出参数。如果是单向操作,WcfTestClient将在消息框中通知您已成功调度此操作。如果出现异常,WcfTestClient将在消息框中显示异常信息,并让您发出其他调用。WcfTestClient不使用测试服务来维护传输层会话(或任何其他会话)。所有调用均在新代理实例上进行。此外,所有调用均异步进行,这样UI能随时进行响应。但是,尽管是异步调用,WcfTestClient只允许一次调度一个调用。WcfTestClient从代理文件(包括.config文件)以静默方式创建程序集,然后从临时位置加载该程序集。如果单击树中的“ConfigFile”(配置文件)项,您可以获取
该.config文件(添加服务引用时生成的同一.config文件),并可以将其显示其选项卡中。与早期的VisualStudioASMXWeb服务测试页不同,通过WcfTestClient您可以借助枚举、类或结构(每个类或结构都是其他类或结构的组成部分)等复合参数、甚至是参数集合和参数数组来调用操作。只需展开“Request”(请求)部分中的项,从下拉列表中设置其值(例如枚举值),并进行调用即可。如果操作接受集合或数组,您还需要设置其长度。例如,图5显示了以下操作的结果请求和响应:图5指定数组长度和值(单击该图像获得较小视图)图5指定数组长度和值(单击该图像获得较大视图)[OperationContract]boolProcessNumbers(int[]numbers]类似地,“Response”(响应)窗格将包含所有返回的复合值或输出参数。这样我们发现了WcfTestClient的一个缺陷:为了指定要测试的不同服务,您必须先关闭,并在更改命令行参数后重新启动WcfTestClient。如果能同时在GUI中提供服务地址,则可能会很好地缓解这个问题。您可以直接将WcfTestClient集成到您的VisualStudio2008解决方案中。首先,将类库项目添加到解决方案,并删除所有引用、文件夹和源文件(因为您不需要这些项)。然后,将设置为外部启动程序,并提供一个或多个测试服务的一个或多个元数据地址,例如IIS或WAS托管项目的.svc地址,或者就此而言,解决方案内部或外部主机项目的任何其他元数据地址。请注意,如果计算机上只安装了.NETFramework3.0,则您不能在其上使用WcfTestClient,因为WcfTestClient需要使用内部.NETFramework3.5树网格控件(用于表示复合参数的控件)。
当然,您可以在一个步骤中结合WcfTestClient和WcfSvcHost,这样即可自动托管服务库中的服务并对其进行测试:/service:/client:/config:/clientArgs:localhost:9000/但是,可以使用WcfSvcHost指定元数据参数。默认情况下,WcfSvcHost将向指定客户端应用程序传送它在服务.config文件中找到的元数据地址。仅当服务未提供自己的元数据或您希望测试客户端使用其他地址时,才应显式指定元数据地址。此外,如果服务.config文件包含给定服务的多个元数据终结点,则这些终结点将按以下优先顺序提供:HTTP、TCP、IPC和HTTP-GET。您可以在VisualStudio2008中合并这些步骤以进行无缝托管和测试体验。将指定为启动程序,并将.config文件和指定为客户端。WCF服务库作为TargetFramework的一项功能,VisualStudio2008提供了多个新的WCF项目模板。通过“NewProject”(新建项目)对话框中的组合框,您可以指定TargetFramework的版本(2.0、3.0或3.5),如图6所示。图6WCF项目模板(单击该图像获得较小视图)图6WCF项目模板(单击该图像获得较大视图)如果选择Framework2.0,则没有任何新模板可用。Framework3.0中提供了一个称为WCF服务库的新项目模板。此项目类型只是WcfSvcHost和
WcfTestClient的预构建用法,与我前面提到的技术(将两者合二为一)非常类似。请注意,使用WCF服务库模板,就不需要将指定为启动程序或.config文件,因为项目文件包含适用于WCF服务库的新ProjectTypeGuids元素。但是该模板有一个负面影响:停止调试程序不会终止测试客户端;时间久了,您的桌面会由于孤立客户端而变得杂乱。要解决此问题,只需还原到前面清晰介绍的手动步骤。WCF服务库还提供了一个用于服务约定、服务约定的实施及匹配的.config文件的简单模板。利用聚合服务库,您可以通过WCF终结点实现RSS源,并且可以从返回源的简单服务约定、服务约定的实施及匹配的.config文件着手操作。您可以托管和显示自己的源,与托管和显示任何其他服务一样。聚合终结点使用新的WebHttpBinding绑定。此新绑定旨在用于接收Web请求,而不能用于常规服务调用。使用“顺序工作流服务库”模板,您可以将终结点的约定操作作为工作流活动来实现,或者将工作流显示为服务。项目将包含一个用于实现简单约定和匹配的.config文件的顺序活动。尽管客户端也将与类似传统终结点的终结点进行交互,但其实现完全是工作流驱动的。“状态机工作流服务库”模板使用状态机而不是顺序工作流来实施其操作(触发状态转换)。工作流项目模板使用WcfSvcHost和WcfTestClient,如同普通WCF服务库那样。工作流模板还使用新的上下文绑定对工作流实例ID的传递进行管理,从而支持持续工作流。我将在以后的专栏中详细介绍这些绑定。添加服务引用mework3.0提供了一项用于向WCF服务添加引用的基本功能,而不具有SvcUtil的许多高级功能。VisualStudio2008具有一个新的服务引用对话框,如图7所示。
图7“添加服务引用”对话框(单击该图像获得较小视图)图7“添加服务引用”对话框(单击该图像获得较大视图)您可以在任何项目中打开此新对话框,方法是:右键单击解决方案资源管理器中项目内的任意位置,然后从上下文菜单中选择“AddServiceReference”(添加服务引用)。请注意,必须将项目配置为针对.NETFramework3.0(及更高版本)才能启用此选项。在“AddServiceReference”(添加服务引用)对话框中,首先需要指定服务元数据地址(不是服务URL,如对话框中所述),然后单击“Go”(执行)查看可用服务终结点(不是服务,如标记所示)。必须指定命名空间(如MyService)才能包含生成的代理,然后单击“OK”(确定)生成代理并更新.config文件。请注意,在多数情况下,VisualStudio2008不是足够的智能来推断最清楚的绑定值,因此,它将通过声明绑定的所有默认值来删除.config文件。VisualStudio的未来版本中将会解决此问题。如果您关注对.config文件的维护,请先打开.config文件,再添加引用,然后执行一次撤消(Ctrl+Z)操作,最后手动将.config文件条目添加到客户端部分中。只要WCF服务位于网站项目或某个新WCF服务库中,您就可以使用“Discover”(搜索)按钮在自己的解决方案中查找这些服务。如果位于网站项目中,VisualStudio2008将检索IIS中的元数据或启动基于文件系统的开发服务器。如果位于WCF服务库中,则WCF将自动启动其主机(WcfSvcHost)以便获取元数据。可以通过“Advanced”(高级)按钮打开设置对话框,从而调整代理生成,如同使用SvcUtil(参见图8)一样。通过使用更直观的选项,您可以配置生成的代理和约定(公共或内部)的可见性;可以为数据类型生成适用于高级互操作方案的消息约定,在此方案中必须遵从现有消息格式(通常为自定义),并可以单击“AddWebReference”(添加Web引用)按钮将引用转换为旧ASMXWeb服务引用。
图8服务引用高级选项(单击该图像获得较小视图)图8服务引用高级选项(单击该图像获得较大视图)“Generateasynchronousoperations”(生成异步操作)复选框可以为导入的约定中的每个操作添加一对匹配的Begin
CalculatorClientproxy=newCalculatorClient();intsum;AsyncCallbackcompletion=(result)=>{sum=(result);(sum==5);();};dd(2,3,completion,null);虽然您可以按原样使用这些方法,但是提供给Begin
publicvoidAddAsync(intnumber1,intnumber2,objectuserState);publicvoidAddAsync(intnumber1,intnumber2);//Restoftheproxy}客户端还可以为
字典也具有类似功能。通常情况下,如果服务操作返回可序列化的字典,如下所示[Serializable]classMyDictionary
通过服务引用的高级设置对话框,您可以配置数据协定共享。默认情况下“Reusetypesinthereferencedassemblies”(重用引用程序集中的类型)复选框处于选中状态,但您可以关闭此功能。不管复选框的名称是什么,此复选框都将只能共享数据协定而不能共享服务约定。使用复选框下面的单选按钮(参见图8),还可以指示VisualStudio2008在所有引用的程序集中重用数据协定,或者通过选中列表中的特定程序集来限制共享这些程序集。添加引用后,项目将具有一个新文件夹ServiceReferences,该文件夹中显示了每个引用的服务的服务引用项(参见图12)。图12服务引用文件夹随时可以右键单击引用并选择“UpdateServiceReference”(更新服务引用)来重新生成代理并更新客户端的.config文件。由于服务引用项中还包含一个记录了所使用的原始元数据地址的文件,因此可以执行此操作。还可以选择“ConfigureServiceReference”(配置服务引用)打开一个对话框,该对话框与添加引用时使用的高级设置对话框类似。通过配置服务引用对话框,您可以更改服务元数据地址以及其他高级代理设置。微软公司计划添加WindowsLive应用程序的功能到VisualStudio开发工具包中,这样程序员就能以最快速度开发出有关于Live网络服务平台的应用.公司计划在VisualStudio2008中正式实施这一捆绑战略,目前他们正在进行技术测试,包括目前的2005版本,Beta版本将在10-11月发布.
WindowsLive是微软一系列网络服务的名字,包括搜索,即时通信,E-Mail,Blog和图像共享等,此前,WindowsLive具有一系列的SDK,但将它整合到开发工具还是第一次.最让程序员激动的是,WindowsLive的周边开发是有回报的,程序员将得到微软的分红,大约0.25美元每独立用户,对于Live应用集中的程序来说,还是非常诱人的.


发布评论