Visual Basic 2010有哪些新的改进?

[原文作者]:Jonathan Aneja

[原文链接]:What’s New in Visual Basic 2010

Jonathan Aneja

    自1991年面世以来,Visual Basic一直都是创建项目的高效工具。大概20年后,它仍然提供调用微软.net框架的简单方法,支持开发者开发桌面、手机、浏览器甚至云程序。

    这个月微软将会发布Visual Studio 2010,它包含了Visual Basic的10版本(有时候被叫做VB2010或者VB10)。这个强大的版本包含了许多节约时间的功能,它能够帮助开发者以最少的代码做最多的事情。为了顺利的使用Visual Studio 2010里的Visual Basic,下面是所有你需要知道的。

共同改进(Coevolution)

    以前,Visual Basic和C#是由不同的组开发的,这就导致了一些功能在一种语言上比在另一种语言上先出现。比如,C#有自动属性和集合初始器,Visual Basic却没有;Visual Basic有后期绑定和可选参数这些功能,C#却没有。但是当一个新的功能出现在一种语言上时,许多客户会要求另一种语言也可以兼容这些功能。

    针对这些反馈,微软将Visual Basic和C#组合并,采用共同演化的策略,为的就是让各种语言能共同发展。当主要的功能在一种语言中被提出,它也应该出现在其他的语言当中。这并不意味着每一个功能都会在这两种语言中出现并且以同样的方式运作;事实上,每一种语言都有它自己的历史,意义和感觉——需要去维持的重要特征。共同演化意味着你能在一种语言里完成的功能在另一种语言里也同样简单实现。

    在.NET框架4里,Visual Basic和C#朝这个目标都迈出了巨大的一步,都增加了一些另一种语言已经具有的功能。然而,共同演化并不只是关于过去,它也是语言在未来的革新。从这个意义上来说,.NET框架4推出了强大的新功能,像动态语言运行时,嵌入操作类型和泛型差异,对这两种语言,Visual Basic和C#开发者可以充分利用.NET框架的优点。

Visual Basic 2010的新功能

    Visual Basic 2010的新功能是为了帮助你用更少的代码实现更多的功能。我们(Visual Basic设计组)看到开发者往往不得不写很多冗长的样板代码,调查之后我们决定让编译器去做这部分工作。这只是个蓝图,让我们一个个的深入这些功能。

隐行延续(Implicit Line Continuation)

    Visual Basic是一种面向行的语言,它使用清晰的,类似于英语的语法来提高可读性。但是,这往往导致在代码中碰到了每行80个字符的限制,迫使开发者使用鼠标滚动很多。你可以使用下划线来告诉编译器,它应把下一行作为当前行的一部分来处理(即将多个物理行作为一个单独的逻辑行来处理)。但是不得不重复的输入下划线也一直使人困扰,事实上,几年来,对编译器要求最多的功能就是解决这个问题。

然而,在Visual Basic 2010,编译器做到了。现在,哪些记号(像逗号,句号,运算符)会出现在续行字符之前,编译器都知道,并且会插入这些字符,所以开发者不用做这些了。例如,用一个逗号结束Visual Basic语句不再合法;编译器知道这些,所以当它发现一个记号看起来像逗号,回车,它就会推断续行符的存在,就像图1上的例子所示。

图1 推断续行符

<Extension()>

Function FilterByCountry(

  ByVal customers As IEnumerable(Of Customer),

  ByVal country As String) As IEnumerable(Of Customer)

    Dim query =

      From c In customers

      Where c.Country = country

      Select <Customer>

        <%=

          c.Name &

          "," &

          c.Country

        %>

      </Customer>

    Return query

  End Function

在Visual Basic 2008,图1的代码会需要9个下划线。然而,在每个这样的例子里,编译器推断在什么时候需要下划线并且允许它被省略:

· 在<Extension()>属性之后

· 在函数的声明里( (左括号)之后

· 在第一个参数,之后

· 在函数的声明里)(右括号)之前

· 在=(等号)之后

· 在<%=(嵌入表达式的开始标签)之后

· 在XML文档每个&(与符号)之后

· 在%>之前(嵌入表达式的结束标签)

如在例子中表现的一样,如果每个部分都在同一行就要超过80个字符,这个编译器新的功能,对这种方法签名尤其有用。在图2,你将会看到记号和续行符隐藏的地方的所有组合。

图2 续行符隐藏的地方

记号

之前

之后

, (逗号),  .  (点),   >  (属性),   (  {  (左括号),   <%=  (嵌入表示式的开始 (XML 字符))

 

X

),   },   ,   ]  (右括号), %> (嵌入表达式的结束)

X

 

所有的 LINQ 关键字:

Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending, Descending

X

X

运算符:

+ ,   – ,   * ,   / ,   \ ,   ^ ,   >> ,   << ,   Mod,   & ,   += ,   -= ,   *= ,   /= ,   \= ,   ^= ,   >>= ,   <<= ,   &= ,   < ,   <= ,   > ,   >= ,   <> ,   Is,  IsNot,  Like,  And,   Or,  Xor,  AndAlso,  OrElse

 

X

With (in an object initializer)

 

X

    
正如你看到的,有60多个地方不需要下划线。(事实上,在这片文章中,没有一个代码示例需要续行符。)当然,你仍然可以使用下划线,所以以前版本上的Visual Basic代码仍然如我们期望的兼容。

声明Lambdas表达式(Statement Lambdas)

Lambdas这个词初听起来会有点吓人,但Lambdas简单来说是定义在一个方法内的方法。Visual Basic 2008用函数关键字来介绍lambdas表达式:

Dim customers As Customer() = …

Array.FindAll(customers, Function(c) c.Country = "Canada")

Lambdas表达式提供一种相当不错的紧凑的方式去本地化表达逻辑,而不必分割成多个方法。例如,下面是之前的code在Visual Studio 2005(不支持 Lambdas表达式)里的情况:

Dim query = Array.FindAll(customers, AddressOf Filter)

    …

Function Filter(ByVal c As customer) As Boolean

  Return c.Country = "Canada"

End Function

不幸的是,Visual Studio 2008中的Lambdas表达式要求表达式返回一个值,所以:

Array.ForEach(customers, Function(c) Console.WriteLine(c.Country))

将会导致:

‘Compile error: "Expression does not produce a value."

Console.WriteLine是一个Sub过程(在C#中返回空),所以它没有返回值,这就是为什么编译器报一个错误。解决这个问题,Visual Studio 2010支持Statement Lambdas,就是可以包含一个或多个声明的Lambdas。

Array.ForEach(customers, Sub(c) Console.WriteLine(c.Country))

因为Console.WriteLine没有返回值,我们可以创建一个Sub lambdas,而不是一个Function lambdas。下面是另一个使用多个声明的例子:

Array.ForEach(customers, Sub(c)

                           Console.WriteLine("Country Name:")

                           Console.WriteLine(c.Country)

                         End Sub)

当执行这段代码,它会为每个customer打印2行,还要注意,当你在编码时悬停,你会注意到编译器已经推断出类型为Customer(键入 c As Customer来声明类型也是合法的)。动态布线事件处理是statment lambdas的另一大用途:

AddHandler b.Click, Sub(sender As Object, e As EventArgs)

                      MsgBox("Button Clicked")

                      ‘insert more complex logic here

                    End Sub

并且事实上,你可以将statement lambdas同Visual Studio 2008里提到的一个功能合并到一起:松弛委托。(你可以使用委托——类型安全的函数指针——来一次执行多个函数。)这种结合产生一种更简单的签名:

AddHandler b.Click, Sub()

                      MsgBox("Button Clicked")

                     ‘insert more complex logic here

                    End Sub

松弛委托让你从一个事件处理程序里完全省略参数——非常好的优点,这些参数频繁的提供但却从来没使用过,所以只会增加视觉噪音。

除了我们已经看到的单行Sub lambdas和多行Sub lambdas,Visual Studio 2010也支持多行Function lambdas:

Dim query = customers.Where(Function(c)

                              ‘Return only customers that have not been saved

                              ‘insert more complex logic here

                              Return c.ID = -1

                            End Function)

    另外有趣的是,Statement lambdas跟Visual Basic 2008的匿名委托采用相同的方式。人们经常把它跟C#的匿名方法混淆,但是技术上来说,他们并不一样。匿名委托适用于Visual Basic编译器推断委托类型是基于一个lambda的方法签名的时候。

Dim method = Function(product As String)

               If product = "Paper" Then

                 Return 4.5 ‘units in stock

               Else

                 Return 10 ’10 of everything else

               End If

             End Function

MsgBox(method("Paper"))

     如果你运行这段代码,你将会看到4.5显示在信息窗口上。当然,如果你悬停在这个方法上,你会看到Dim method As <Function(String) As Double>。因为我们不提供真正的委托类型,所以,编译器会自动生成一个,就像:

Delegate Function $compilerGeneratedName$(product As String) As Double

     这就叫匿名委托,因为它只出现在编译器生成的代码里,而不在自己写的代码里。事实上请注意,当没有As语句用来说明lambda的返回类型时,编译器推断返回值是Double型。编译器查看所有lambda里的返回语句,发现Doule类型(4.5)和Integer类型(10):

‘Notice the "As Single"

Dim method = Function(product As String) As Single

               If product = "Paper" Then

                 Return 4.5 ‘units in stock

               Else

                 Return 10 ’10 of everything else

               End If

             End Function

然后运行主导型算法并确定它可以安全的把10转换成Double类型,但是不能安全的将4.5转换成Integer类型,因此Double型是更好的选择。

当然如果编译器不尝试去推断类型,你也可以明确控制返回值的类型,而不是

用 IntelliTrace 调试应用程序

 

[原文作者]:Justin Marks

[原文链接]:Debugging Application with IntelliTrace

下载示例代码

     人们是如何修正代码中的Bug的?设置一个断点、在调试器里运行程序、进行一些单步执行–并祈祷这问题是在你的控制范围内, 然后你才能干些事情

    自从ENIAC(世界第一台积分电子计算机)被发明以来我们一直就是这么Debug的了。这种乏味而耗时的Debug办法到目前为止我们用得还行,不过,现在是让Debug变得简单些的时候了。随着 Visual Studio 2010 Ultimate 的发布,新的 IntelliTrace 功能通过让程序员们能更好的洞察他们的应用程序的运行,把调试事业带入了21世纪。

    跟 Windows SysInternals 的 Process Monitor 之类的其它监视和跟踪工具很像,Visual Studio 2010 会搜集一个应用程序在运行时的数据,以帮助程序员们去诊断错误。这些搜集到的数据被称作 IntelliTrace 事件。这些事件 被搜集为默认调试经验的一部分,加上别的部分,它们让程序员们可以不需要重启debugger就可以穿越到运行时去看看应用程序里面发生了什么事情。

    在这篇文章中,我将向你介绍 IntelliTrace,并为你演示作为日常开发活动一部分,它是如何为程序员们提供好处的。我将展示 IntelliTrace 是如何提供一个那些在一个应用程序运行时发生事件们的时间线,以及程序员们可以如何使用这些事件去做有针对性的调试。然后,我将谈到那些“为了搜集关于应用程序的一系列更深入的信息,以得到一个完整的运行时历史”而可以被程序员改动的设置。最后,我将演示如何使用一个以前由别人–比如一个测试人员–建立的 IntelliTrace 记录文件去调试一个应用程序,而不用去运行该应用程序以重现错误。

    当 Visual Studio 评估团队开始为 Visual Studio 2010 做计划的时候,我们花费了大量的时间与客户讨论他们是如何诊断他们的应用程序中的问题的。尽管每个人都有自己的一套方式以及偏爱的工具,但是有一点却是压倒性的清楚:传统的诊断应用程序中问题的方法既困难、耗时又代价高昂。程序员们收到的Bug报告几乎从来也没有任何重现问题的步骤,大多数就是由象“我正在使用这个程序,但是它突然Crash了”这样的句子组成。在极少数有重现步骤的情况下,你也可能会面对 Bug 发生在特殊环境下的问题,而这又会导致一些需要解决的新问题。此外,bug常常是因为对一个 framework 或者别的代码是如何运作的误解而产生的。

    明确了这些要点之后,我们有了一个新的调试器功能的构想:它需要能够在问题发生的时候就搜集到正确的信息。我们的目标是交给程序员准确的重现步骤、系统环境设置、以及公布他们使用的 framework 或者代码的行为,以彻底的提高程序的可诊断性。随着 Visual Studio 2010 Ultimate 的发布,IntelliTrace 通过让程序员们能够更好的洞察应用程序和 framework 的行为、以及打开一个由测试人员搜集的 IntelliTrace文件去解决“没有重现步骤”的情况的能力,为我们带来了调试体验的极大提高。

IntelliTrace 介绍

    当一个程序员需要对代码运行的一个更深入的理解时,IntelliTrace提供了一种可以“调高(仪表的)刻度”的办法来搜集一个应用程序的完整运行时历史。

为了阐明它,我将使用 Tailspin Toys 示例应用程序来为你演示 IntelliTrace 可以搜集哪些类型的信息。我将在 Visual Studio 中打开这个 Solution 并开始调试。当这个 Web 站点启动的时候,我将浏览到 “About us” 页,然后就会收到一个服务器错误。那么你会怎么诊断这个问题呢?如果你象我这样,那么本能的第一反应可能是去设置web.config文件以禁用显示自定义错误,然后重启调试器。可如果这个问题是断断续续无规则的出现的呢?如果你能够在问题出现的时间点上断入进程,在错误发生后,能够从 Visual Studio 获得一个发生在应用程序中的事件的历史,这样是不是很不错?

当你在调试的时候,IntelliTrace 会在后台搜集一个托管应用程序的数据,包括来自许多像 ADO.NET、ASP.NET、以及System.XML之类的 framework 部件的信息。这些 IntelliTrace 事件让程序员可以查看在运行时曾经发生过什么事情,以及更重要的:“穿越时空”去查看应用程序之前的状态而不需要重启调试器。当我打开调试器的时候,马上看到了一个被搜集到的 IntelliTrace 事件的有序列表,如图1:

clip_image001

图1 IntelliTrace 搜集的诊断信息

    从图1中你可以看到,这个IntelliTrace事件的列表所包含的内容远远超过你在 Process Monitor 中能看到的文件和注册表访问。我们已经为 Visual Studio 2010 定义了将近150种 IntelliTrace 事件,而且已经有计划日后增加更多的事件。图2强调了一些由IntelliTrace搜集的事件的类别:

图2 在 Microsoft .NET Framework 上可用的 IntelliTrace 事件

类别

说明和被搜集的数据

ADO.NET

与执行SQL查询有关的事件,被执行的命令以及连接字符串

ASP.NET

与ASP.NET管道(pipeline)有关的事件,以及请求的处理和重定向

Console

控制台输出

Data Binding

WinForm数据绑定

环境变量

从进程中取回和运算出环境变量

文件

文件的建立、删除和访问

手势(Gestures)

用户在Web表单、Windows Form和WPF上对常用控件执行的操作。除了搜集关于与控件交互的数

用Visual Studio 2010收集使用,性能和稳定性信息来改进软件

 

[原文作者]:Beth Massi

[原文链接]:Using Visual Studio 2010 to Collect Usage, Performance and Stability Information to Improve Software

内容

Dotfuscator被认为是生成后代码插入的平台

一个具体的例子

   在Visual Studio 2010里面,Dotfuscator CE新的官方名字是“Dotfuscator软件服务-社区版”重命名是为了强调它在这次发布中更集中于作为一个生成后工具。一个全新的基于代码插入特性和服务的类库被加了进来,产品有了新的风格,重新组织和简化了用户接口,加强了可用性和创新性。最后,对于传统的你已经在使用的功能,也有一些改进。这篇文章中,我会给你介绍新代码插入的特性。用这些特性可以帮助你生成更好的软件,并且更快。

Dotfuscator被认为是生成后代码插入的平台

    作为一个工具,Dotfuscator已经可以进行重要的程序分析和二进制代码的转变,Dotfuscator在独特的位置中,它可以在生成后的阶段有一些加值,而不用改动任何源代码。在这之前,Dotfuscator专业版已经有了这些功能,所以我很高兴从Visual Studio 2010开始,Dotfuscator社区版也参加了这个俱乐部。Dotfuscator社区版现在增加了下面的功能:

对象跟踪: 检查什么程序被执行了,这些程序的什么版本,多长时间。

特性使用跟踪:检查什么特性在被使用,在什么情况下,多长时间。

程序过期:编码一个过期日期,当程序过期后还在被使用就传送一个警告,并且终止过期的程序对象。我们把这个叫做“保存期限”。

篡改防御:检测篡改过的程序的执行,传送事件警告,并且终止篡改过的程序的运行。

   在服务器端,有一个免费版本的运行时智能服务门户 free.runtimeintelligence.com。发送对象跟踪,特性使用,和其他提醒给这个免费服务,在配置Dotfuscator代码插入的时候,只需选择免费的终结点作为你的消息的终点。(下面我会展示怎么去做。)当你用公司的ID号码登录到这个门户网站,你可以看到你的程序发送过来的数据。

一个具体的例子

    让我们用Dotfuscator社区版新的功能来给“hello world”这个例子程序添加特性分析。这个例子程序被默认安装在你的%Program File%\Microsoft Visual Studio 10.0\PreEmptive Solutions\Dotfuscator Community Edition\Samples文件夹下面。因为在普通用户对这个文件夹通常不可写,所以我建议建一个工作区域在你的“Documents”文件夹下面,然后拷贝HelloWorld.exe 和hello_config.xml到这个文件里面。他们分别是输入程序和相关的Dotfuscator的配置文件。

    当你做好上面的步骤之后,从Visual Studio的工具菜单栏打开“Dotfuscator Software Services”,然后通过Dotfuscator File-〉Open Project menu打开hello_config.xml文件。

配置特性分析法

    点击右边的Instrumentation结点导航到Instrumentation编辑器,见图1。

    点击Options,然后钩选“Enable Instrumentation”和“Send application analytics messages”。这个告诉Dotfuscator去插入代码,当程序在跑的时候用来收集特性的使用数据。

clip_image001

图1:在Visual Studio 2010中配置Dotfuscator 特性分析法

     你通过标签来配置实际的代码的插入。标签可以用.NET的用户标签内置在源代码中(定义在PreEmptive.Attributes.dll里面,在dotfuscator的安装目录下面)。或者,你不想修改源代码,可以用“extended attributes”,这些是Dotfuscator来维护的,存放在dotfuscator的配置文件中。这是我们将会在例子中使用的方法。

    第一,在程序集的水平上,我们会加两个标签用来标识和集合你的程序产生的信息。选择Attribute,然后高亮显示Helloworld.exe程序集。右击它,并且选“Add Attribute”。在Add Attribute对话框中,选择ApplicationAttribute和BusinessAttribute,然后点击OK(如图2)。

clip_image002

图2:在程序集水平上添加程序和业务标签

    BusinessAttribute有一个CompanyKey,它是一个独一无二的值用来标识程序的创建者。等会你可以用这个值来登录免费的Runtime Intelligence Services Portal去看你的数据。你可以点击关联这个CompanyKey的入口区域的“…”按钮,生成一个新的独一无二的值。你也可以设置CompanyName关联这个CompanyKey。这个不是必须的,名字可以用来个性化这个门户网站。见图3。

clip_image003

图3:自动生成的CompanyKey是程序的唯一的标识符, CompanyName不是必须的,帮助个性化你的程序

    同样的,ApplicationAttribute有一个GUID属性,用来标识插装的程序。点击关联这个GUID属性的“…”按钮,生成一个程序的标识符。你可以让其他的ApplicationAttribute属性空白。

    现在是时候添加两个attribute到Main方法里面,写在HelloWorld.Hello类里面的。用instrumentation的编辑器的类浏览方式导航到那个类,右击Main方法,然后选择Add Attribute。选择Setup和Teardown标签,然后点击OK(如图4)。

clip_image004

图4:添加Setup和Teardown标签到Main方法里面

    Setup标签应该放在当程序开始时调用的那个方法上面。当Dotfuscator运行时,他插入初始化代码到加了标签的方法中,Main方法通常是一个好的备选项,但不是必须的,它需要是一个在任何消息被发送之前调用的方法。配置S
etupAttribute,唯一的属性你需要去设置的就是Custom Endpoint,程序发送的所有的消息的一个远程终点。点击“…”按钮激活Custom Endpoint对话框,然后选择“PreEmptive’ Free Runtime Intelligence Services”作为终结点。(见图5)

clip_image005

图5:选择ProEmptive’s Free Runtime Intelligence Services 作为Runtiem Intelligence消息的终结点

    TeardownAttribute也可以被放在Main方法里面,通常,它应该被放在程序结束时,在所有消息发送完毕之后调用的那个方法,Dotfuscator插入清理代码在被加标签的方法里面。因为HelloWorld.exe是一个单线程的控制台程序,把Teardown标签加载Main方法里面是可行的,因为代码最后执行的也是Main方法。

    现在我们已经标识了程序和规定的终结点,我们现在可以加上使用分析了。HelloWorld是一个简单的程序,打印Hello和Goodbye—我们感兴趣的时候,多久这两个特性会被使用。

    Hello特性是在HelloWorld.Friendly.SayHello类里面的实现的。通过instrumentation的编辑器导航到这个方法。跟之前一样,右击然后激活Add Attribute对话框,但是这次,选择Feature Attribute。FeatureAttribute告诉Dotfuscator到哪去插入分析收集代码。这个这个标签名字的属性为“SayHello”(见图6)。你设置的这个名字会出现在分析的报告里面,所以选择一个可读性强的名字是非常重要的。设置FeatureEventType为“Tick”。这个告诉Dotfuscator,这个特性使一个“instantaneous“事件,相对于有停止和开始时间的事件。

clip_image007

图6:设置特性名字和特性事件类型,使得特性在门户网站上更易识别

    现在添加同样的标签到HelloWorld.Friendly.SayGoodbye类然后给这个特性的名字设置为“SayGoodbye”。配置工作现在就完成了,然后你已经可以去运行Dotfuscator,点击play 按钮或者按Ctrl-B去生成这个项目。 当你运行这个程序的时候,它会在它开始和停止的时候,和SayHello,SayGoodbye方法被执行的时候发送信息。

查看你的数据

    你可以用company key登录Free Runtime Intelligence Portal free.runtimeintelligence.com 来查看数据。一旦你登录,你就可以看到你的程序和特性仪表板回来问题,就像:

    哪个程序被使用最多? (图7)

clip_image008

图7:标识哪个程序被运行最多次

    程序被运行在什么操作系统上? (见图8)

clip_image009

图8:标识程序运行在什么操作系统上

    程序运行在什么CLR版本上?(见图9)

clip_image010

图9:程序运行在什么CLR版本上

    特性使用的频率? (见图10)

clip_image011

图10:特性使用的频率

    也有同样数据的表格样式( 见图11)

clip_image012

图11:表格样式的数据

    特性使用数据(见图12)

clip_image013

图12:表格样式的特性使用数据

功能预览:VS2010中快速查询文件或标签

 

[原文作者]:Lisa Feigenbaum

[原文链接]:Walkthrough: Quick Search for Files and Symbols in Visual Studio 2010

 

    快速查询是2010CTP(Community Technical Preview,社区技术预览)中我喜欢的功能之一,基本上我每时每刻都在使用。我希望读者在开发中也感受到这项功能的魅力。由于开发者需要不时在代码中寻找某些信息的需求,快速查询已经成为当今开发环境最常用的功能,这篇文章深入介绍了VS2010的这项功能。

    此博文是October VS2010 CTP(VS2010社区技术预览十月版)功能预览系列的一部分,该系列旨在深入浅出地介绍VS2010及.NET 4.0中的新功能,即使读者没有下载社区技术预览,也可以在本文结尾处或以下论坛:

    http://social.msdn.microsoft.com/Forums/en-US/vs2010ctpvbcs/thread/1eb74a01-0d50-4a58-b9b3-cdfae5807ef8

    就本文内容及预览发表评论。

    谢谢!

    Lisa(非译者)

    功能预览:针对文件及标签的快速查询

     本文介绍的是VS2010中针对文件及标签的快速查询。快速查询指借助模糊查询技术协助开发者在代码中快速定位至某段代码。当打开项目工程中任意代码文件时,用户可以借助按下CTRL+,(CTRL键和逗号键)快速启动此功能。在快速查询窗口中,用户可以输入任意数量的查询条件,VS会根据输入值寻找项目中符合条件的标签,包括文件名,类型名,成员名。

     此功能预览使用VS中自带的PeopleTrax例子来进行示范,用户可以在任意工程中使用此功能。

    打开示例工程

  1. 示例文件位于:C:\Program Files\Visual Studio 10.0\Samples\1033\TeamDev Samples.zip.
  2. 解压缩示例文件压缩包到自定义路径,找到并打开PeopleTrax 文件夹。
  3. 双击 PeopleTrax.sln在 Visual Studio 2010中打开该工程.

     使用快速查询来寻找标签

     1. Open any file. Click inside the code editor and press CTRL+,. The following window appears. 打开任意文件,点击代码编辑器内部然后按下CTRL+,,将打开如下窗口

       

        

 

 

     2. 在快速查询窗口顶部文本输入框内输入get. 快速查询窗口将列出所有包含单词 "get" 的标签, 如下图所示,输入不分大小写.

   

          

 

      3. 在 "get"之后, 输入空格及单词 name.快速查询窗口会显示所有包含单词"get" 和 "name"的标签, 如下图所示.

 

          

 

       4.按下向下键选中结果列表中的 GetNames 项. 按回车, Visual Studio 将定位到GetNames 方法定义处.

Visual Studio 2010 中WPF拖拽式数据绑定

[原文作者]:Milind Lele
 
08年11月19日12:39PM 上传
VS的2010版本(点击此处下载)比以前的一个改进的地方是WPF的拖拽式数据绑定,WinForms的拖拽式数据绑定在Visual Studio 2005就已经存在了。我们在VS2010把拖拽式数据绑定应用到了WPF上。如果你熟悉WinForms的数据绑定,你会发现WPF的拖拽式数据绑定和WinForms的很相似。
 
VS2008 SP1让我们可以在工程中添加一个EDM(实体数据模型),在VS2010中,添加了在数据源窗口中支持EDM这一功能,所以如果添加了一个EDM到工程中,这个EDM可以显示在数据源窗口中,你知道拖动这个EDM到WPF窗体中就可以完成绑定了。
具体信息我发布在Visual Studio Data blog上了。
你可以下载CTP体验一下,然后告诉我你的想法。