Visual Studio 2010 高级编程


Visual Studio 2010 高级编程 (美) Nick Randolph Michael Minutillo David Gardner Chris Anderson 著 任 鸿 普 杰 高宇辉 译 II 北 京 Nick Randolph, David Gardner, Michael Minutillo, Chris Anderson Professional Visual Studio 2010 EISBN:978-0-470-54865-3 Copyright © 2010 by Wiley Publishing, Inc. All Rights Reserved. This translation published under license. 本书中文简体字版由 Wiley Publishing, Inc. 授权清华大学出版社出版。未经出版者书面许可,不得以任何方式 复制或抄袭本书内容。 北京市版权局著作权合同登记号 图字:01-2011-0945 本书封面贴有 Wiley 公司防伪标签,无标签者不得销售。 版权所有,侵权必究。侵权举报电话:010-62782989 13701121933 图书在版编目(CIP)数据 Visual Studio 2010 高级编程/ (美) 兰多夫(Randolph,N.) 等著;任鸿,普杰,高宇辉 译 —北京:清华大学出版社,2011 书名原文:Professional Visual Studio 2010 ISBN 978-7-302-27357-8 I. ①V… Ⅱ. ①兰… ②任… ③普… ④高… Ⅲ. ①计算机网络-程序设计 Ⅳ. TP393 中国版本图书馆 CIP 数据核字(2011)第 232996 号 责任编辑: 王 军 王滋润 装帧设计: 牛艳敏 责任校对: 成凤进 责任印制: 出版发行:清华大学出版社 地 址:北京清华大学学研大厦 A 座 http://www.tup.com.cn 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969, c-service@tup.tsinghua.edu.cn 质 量 反 馈:010-62772015, zhiliang@tup.tsinghua.edu.cn 印 刷 者: 装 订 者: 经 销: 开 本: 印 张: 字 数: 千字 版 次: 2011 年 11 月第 1 版 印 次: 2011 年 11 月第 1 次印刷 印 数: 定 价: .00 元 —————————————————————————————————————————————— 产品编号: 前 言 无论从哪个方面来看,Visual Studio 2010 都是一款内容丰富的产品,它结合了 Microsoft 以往编 程语言(Visual Basic 和 C#语言)的优势,在用户界面上承载了许多改进功能和新功能,为初学者和经 验丰富的.NET 开发人员提供了很多全新的、强大的功能。 《Visual Studio 2010 高级编程》介绍了这个开发工具的所有主要方面,阐述了如何使用每个功 能,给出了如何高效使用各种组件的建议,还说明了 Visual Studio 2010 的组成部分,把用户界面分 解为容易管理的块以便于理解。 《Visual Studio 2010 高级编程》还将详细地描述这些组件,包括它们各自的作用以及相互之间 如何协调工作,使开发工作更高效。 本书读者对象 《Visual Studio 2010 高级编程》适合所有 Visual Studio 开发新手以及想学习一些新特性的有经 验的编程人员。 熟悉 Visual Studio 编程环境的读者可以跳过本书的第Ⅰ部分(该部分介绍了用户界面的基本构 造),直接学习本书中讨论 Visual Studio 2010 新特性的部分。即使熟悉第Ⅰ部分的大多数内容,也应 阅读该部分,其中可能介绍了读者以前没有见过或使用过的 Visual Studio 2010 特性。 初次使用 Visual Studio 的读者,应该先阅读本书的第Ⅰ部分,该部分介绍了一些最基本的概念, 为读者展示了用户界面并讲解了如何定制自己的编程环境。 本书主要内容 Microsoft Visual Studio 2010 无疑是目前开发人员最好的集成开发环境(IDE)。它基于有很长历史 的编程语言和接口,受到开发环境许多不同方面的影响。 下面将简单地介绍有关 Microsoft Visual Studio 2010 的历史和它为开发人员提供的功能。已了解 这方面内容的读者可以忽略该部分的内容,直接跳到下一部分,深入了解集成开发环境的各个方面。 Visual Studio 简史 Microsoft 公司致力于工具的开发已经有很长的历史了,其第一个软件产品是 1975 年的 Basic 版本。那时,编程语言主要是解释性语言,计算机是逐行处理代码。在过去的 30 年里,编程有了 许多改进,最大的改进是开发环境旨在帮助开发人员用他们选择的语言和平台高效地构建应用程序。 为了顺应 32 位计算机的潮流,Microsoft 公司发布了全面的开发工具,通常称为集成开发环境 Visual Studio 2010 高级编程 IV (Integrated Development Environment,IDE)。其中包括编译器和一些补充特性,如区分上下文的编辑 器和 IntelliSense,以帮助编程人员决定在给定的情况下能做什么和不能做什么。还提供了带拖放功 能的直观可视化用户界面设计器,以及一系列工具窗口,可供开发人员查看特定窗口或用户控件上 的各种组件的不同属性。 最初,这些 IDE 因编程语言的差异而各不相同—— Visual Basic 语言因其图形化的设计而方便使 用,Visual C++语言因其功能强大和灵活性较好而著名。后来在 Visual Studio 6 的旗帜下,这些语言 的最新版本连同其他的 Visual 工具(如 FoxPro 和 InterDev)一起,在一个大型开发套件中发布。但显 然,每种语言的工作环境还是有差别,结果就导致开发的每个解决方案都必须针对一种特定的语言。 一个理想的开发环境 Microsoft 公司最初于 2002 年发布了 Visual Studio .NET,它继承了该公司以前发布的各种不同 开发工具的许多功能和特性。Visual Basic 6、Visual InterDev、Visual C++和其他工具(如 FoxPro)都 是 Microsoft 开发团队开发的成果。该团队从外部组中导入了一些内容,但 Visual Studio .NET 2002 和.NET 1.0 主要以 Microsoft 自己的规则和目标为基础。 Visual Studio .NET 2003 是下一个版本,它只有少量的改进,侧重于修复错误。两年后,Visual Studio 2005 和.NET Framework 2.0 面世,接着发布了 Visual Studio 2008 和.NET Framework 3.0、3.5, 这是两个主要的版本,其中新的基础结构框架类远远超过了以往 Microsoft 公司发布的所有类,但这 个版本最重要的部分是 IDE。在 IDE 中,各种组件以相互关联的方式组合在一起,提供了一个高效 的工具集,便于访问所有的元素。 最新版本 Visual Studio 2010 和.NET Framework 4.0 构建在这个强大的基础上。Windows Presentation Foundation 的代码被完全重写了,许多目前已过时的设计器又焕发出了生机。另外,还 有许多新设计器可以帮助构建 Silverlight 应用程序,并且内置了构建 Office 应用程序的支持。 Visual Studio 2010 有几个主要版本:Express、Professional、Premium 以及 Ultimate。本书主要 介绍 Visual Studio 2010 的专业版本,但有些实用特性只在 Premium 版本和 Ultimate 版本中才有。如 果之前没使用过这些版本,请参阅第 54 章~第 57 章的有关内容。 本书组织结构 本书的第 I 部分主要是熟悉 Visual Studio 2010 的核心部分。从 IDE 结构和布局到各种选项和设 置,前 5 章包含了使用户界面匹配自己的工作方式所需的所有内容。 本书的其余内容分为以下部分: ● 入门:该部分介绍如何控制项目,以及如何组织它们以符合自己的风格。 ● 深入:虽然 Visual Studio 的许多图形组件使程序员的工作更容易完成,但程序员在编码时 经常需要一些其他帮助。因此,本部分介绍支持应用程序编码的功能,如 IntelliSense、代码 重构以及单元测试的创建和运行。在.NET Framework 的最新版本中,还添加了支持动态环 境的改进功能,使两种主要的.NET 语言(C#和 VB)的功能更趋于相同。该部分介绍这些语言 的变化,并讨论能帮助编写出更好、更一致的代码的许多特性。 前 言 V ● 富客户端应用程序和Web 应用程序:为了支持构建从Office 插件到云应用程序等所有产品, Visual Studio 可以为许多平台开发应用程序。这两个部分介绍 Visual Studio 2010 支持的应用 程序平台,包括 ASP.NET、Office、WPF、Silverlight 2 和 ASP.NET MVC。 ● 数据:大多数应用程序都使用某种形式的数据存储。Visual Studio 2010 和.NET Framework 都包含处理数据库和其他数据源的强大支持。本部分讲述如何使用 DataSets、Visual Database Tools、LINQ、Synchronization Services 和 ADO.NET Entity Framework 构建处理数据的应用程 序,还讨论了如何使用 Reporting 展示这些数据。 ● 应用程序服务:在构建应用程序的过程中,可能需要访问组织内部或外部的服务。该部分 介绍可用于连接这些服务的核心技术,如 WCF、WF、Synchronization Services 和 WCF RIA Services。 ● 配置和资源:对配置文件的内置支持允许调整应用程序执行的方式,而不必重建应用程序。 而且,资源文件还可以访问静态数据,把应用程序方便地本地化为另一种语言和区域性。 该部分介绍如何使用.NET 配置文件和资源文件。 ● 调试:应用程序调试是开发人员必须完成的一项较难的任务,但正确使用 Visual Studio 2010 的调试功能有助于分析应用程序的状态,并确定出错的原因。该部分介绍了 IDE 提供的丰 富的调试支持功能。 ● 构建和部署:除了讨论如何构建有效的解决方案和向最终用户交付应用程序外,该部分还 涉及如何升级以前版本的项目。 ● 定制和扩展 Visual Studio:如果之前编写的代码不足以减少以后的编码量,就可以使用 Microsoft 提供的扩展 Visual Studio 2010 的功能。该部分从自动化模型开始介绍,讨论了如 何编写插件和宏,以及如何使用新的扩展框架 MEF 来扩展 Visual Studio 2010。 ● Visual Studio Ultimate:本书的最后一部分介绍只能在 Visual Studio 2010 的 Premium 版本 和 Ultimate 版本中使用的功能。另外,还探讨了 Team Foundation Server 为管理软件项目提 供的一个基本工具。 尽管对 Visual Studio 功能集进行了上述分解,并且提供了逻辑性最强、易于理解的主题,但读 者仍可能需要查找特定的功能来帮助自己完成某个活动。为了满足这个需求,只要在本书的其他地 方详细介绍某个功能,本书就会提供对应章节的参考。 本书使用前提 为了高效地使用本书,需要安装 Microsoft Visual Studio 2010 专业版,结合本书的内容安装软件 并实际操作,会使您的学习更高效。 本书假定读者已经熟悉传统的编程模式,可以使用 VB 或 C#语言进行简单的编程,并且能够阅 读用 VB 或 C#语言编写的源代码。如果读者刚开始学编程,使用 VB 和 C#语言的读者可以分别参 考由清华大学出版社引进并出版的《Visual Basic 2010 入门经典(第 6 版)》和《C#入门经典(第 5 版)》。 一些章节讨论了与 Visual Studio 一起使用的其他产品和工具,它们都可以从网站上下载免费版 本或试用版本。 Visual Studio 2010 高级编程 VI ● Code Snippet Editor:这是一个第三方工具,用于在 Visual Basic 中创建代码片段。Snippet Editor 工具参见第 8 章。 ● Sandcastle:使用 Sandcastle 可以通过代码中的 XML 注释,为解决方案中的每个成员和类 生成详细的文档。有关 XML 注释和 Sandcastle 的内容请参见第 12 章。 ● SQL Server 2008:Visual Studio 2010 的安装包包含 SQL Server 2008 Express,可以构建使 用数据库文件的应用程序。但对于比较全面的企业解决方案而言,可以使用 SQL Server 2008。有关数据库连接的内容请参见第 26 章。 ● Visual Studio 2010 Premium 或 Ultimate 版:一个更强大的 Visual Studio 版本,针对开发 过程中的其他阶段(如测试和设计)引入了工具。有关内容请参见第 54 章~第 57 章。 ● Team Foundation Server:这个服务器产品提供了应用程序在 Visual Studio 2010 中的生命 周期管理功能,参见第 57 章。 源代码 在读者学习本书中的示例时,可以手动输入所有的代码,也可以使用本书附带的源代码文件。 本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/或www.tupwk.com.cn/ downpage 上下载。登录到站点 http://www.wrox.com/,使用 Search 工具或使用书名列表就可以找到本书。接着 单击本书细目页面上的 Download Code 链接,就可以获得所有的源代码。 在下载了代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入 http://www.wrox.com/dynamic/books/download.aspx 上的 Wrox 代码下载主页,查看本书和其他 Wrox 图书的所有代码。 勘误表 尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在 本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以 让其他读者避免受挫,当然,这还有助于提供更高质量的信息。 请给 wkservice@vip.163.com 发电子邮件,我们就会检查您的信息,如果是正确的,我们将在本 书的后续版本中采用。 要在网站上找到本书的勘误表,可以登录 http://www.wrox.com,通过 Search 工具或书名列表查 找本书,然后在本书的细目页面上,单击 Book Errata 链接。在这个页面上可以查看到 Wrox 编辑已 提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是 www.wrox.com/misc-pages/booklist.shtml。 注释:由于许多图书的标题都很类似,因此按ISBN 搜索是最简单的,本书英文版的 ISBN 是978-0-470-54865-3。 前 言 VII P2P.WROX.COM 要与作者和同行讨论,请加入 p2p.wrox.com 上的 P2P 论坛。这个论坛是一个基于 Web 的系统, 便于您张贴与 Wrox 图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了 订阅功能,当论坛上有新的消息时,它可以给您传送感兴趣的论题。Wrox 作者、编辑和其他业界专 家和读者都会到这个论坛上来探讨问题。 在 http://p2p.wrox.com 上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己 的应用程序。要加入论坛,可以遵循下面的步骤: (1) 进入 p2p.wrox.com,单击 Register 链接。 (2) 阅读使用协议,并单击 Agree 按钮。 (3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击 Submit 按钮。 (4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。 加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在 Web 上阅读消息。如 果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的 Subscribe to this Forum 图标。 关于使用 Wrox P2P 的更多信息,可阅读 P2P FAQ,了解论坛软件的工作情况以及 P2P 和 Wrox 图书的许多常见问题。要阅读 FAQ,可以在任意 P2P 页面上单击 FAQ 链接。 注释:不加入 P2P 也可以阅读论坛上的消息,但要张贴自己的消息,就必须加入 该论坛。 作 者 简 介 Nick Randolph 当前经营 Built To Roamg 公司,该公司关注的是构建富移动应用程序。Nick 以 前与他人共同成立了 nsquared solutions 公司,并且是该公司的开发经理,领导一个开发团队使用新 一轮技术构建富有灵感的软件。在成立 nsquared 公司之前,Nick 是 Intilecta 公司的首席开发师,最 初他在该公司负责设计和构建应用程序框架。 在获得工程(信息技术)/贸易双学位后,Nick 因为与 Perth .NET 用户组的精诚合作以及在移动设 备方面的成就,而被任命为 Microsoft MVP。他仍通过博客 http://community.softteq.com/blogs/nick/ 和 Professional Visual Studio 网站 www.professionalvisualstudio.com/在设备应用程序开发领域做着积 极的贡献。 Nick被邀请参加了各种会议,包括TechEd Australia、 MEDC和Code camp。他在MSDN Magazine (ANZ edition)上发表过文章,清华大学出版社引进并出版了他撰写的两本书《Visual Studio 2005 高 级编程》和《Visual Studio 2008 高级编程》,他还是 2004 年、2005 年、2007 年和 2008 年度 Imagine Cup 决赛的评委。 David Gardner 是一位资深的.NET 开发人员和 Intilecta 公司的首席软件架构师。David 致力于 开发设计合理的高质量软件产品,并且一直受到用户的好评。自从 20 世纪 90 年代中期开始,他就 是一位解决方案架构师、顾问和开发人员,为澳大利亚、新西兰和马来西亚等地的公司提供专家 指导。 David定期在 Perth .NET用户组发表看法,并出席过许多会议,包括Microsoft TechEd和Microsoft Executive Summit。他获得了科学(计算机科学)学士学位,是一名 Microsoft 认证系统工程师。David 与他人合著了《Visual Studio 2008 高级编程》,他还在 www.professionalvisualstudio.com 网站上发布 关于 Visual Studio 和.NET 的博客。 Michael Minutillo 是一位.NET 软件工程师,获得了计算机科学学士学位。他自喻为“信息海绵”。 从 2000 年早期就开始编写.NET 软件,为其大学学习奠定了基础,从那以后,他就成为.NET 社区的 一个积极成员。 Michael 定期参加 Perth .NET Community of Practice,并演示 C#、ASP.NET MVC 和 Test-Driven Philosophy 的新功能。2009 年,Michael 启动了 Perth ALT.NET 用户组,每个月他都会在.NET 开发 区讨论软件工程工具和实践情况。 Michael 维护着一个技术博客http://wolfbyte-net.blogspot.com,其联系方式是http://twitter.com/ wolfbyte。 Chris Anderson 是一位具备 10 余年经验的专业开发人员,擅长使用 Microsoft 技术构建桌面、 Web 和移动业务应用程序,涉及会计、财产评估、矿业、淡水产品、宠物火葬、后勤、牧场服务、 销售和建筑。他获得了计算机系统工程和工程实践学士学位。Chris 与他人合作成立了 Peer Placements(软件开发人员的专家招聘)公司,还是一名顾问和作者。目前他主攻 Silverlight(特别是用 Silverlight 构建业务应用程序),在 Code Camp Australia 2009、TechEd Australia 2009、 Silverlight Code Visual Studio 2010 高级编程 II Camp Australia 2010 和许多 Sydney Silverlight Designer and Developer Network (SDDN,Chris 是组织 者之一)会议上就这个主题发表过演讲。Chris 的博客地址是 http://chrisa.wordpress.com。 技术编辑简介 Joe Bennett 是具备 20 余年经验的开发人员和软件解决方案架构师,自从.NET 1.0 推出以来就 一直使用.NET。他喜欢为各种规模的公司构建结构良好、健壮的软件,并且愿意与其他开发人员分 享他的知识和经验。 Joe 是 Carolina Software Consultants, LLC 的首席软件架构师,过去是北卡罗来纳州 Triangle 区的 Triangle .NET 用户组的组长。他获得了休斯敦大学的计算机科学的学士学位,并且经常在各种会议 和活动上发表演讲。 目 录 第Ⅰ部分 集成开发环境 第 1 章 快速入门 ...................................... 3 1.1 入门 ................................................... 3 1.1.1 安装 Visual Studio 2010 ................ 3 1.1.2 运行 Visual Studio 2010 ................ 5 1.2 Visual Studio IDE ............................. 6 1.3 小结 ................................................. 12 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 ...................... 13 2.1 Solution Explorer 窗口 ................... 13 2.2 Toolbox 窗口 .................................. 20 2.2.1 排列组件 ...................................... 22 2.2.2 添加组件 ...................................... 23 2.3 Properties 窗口 ............................... 23 2.4 小结 ................................................. 29 第 3 章 选项和定制 ................................. 31 3.1 起始页面 ......................................... 31 3.1.1 定制起始页面 .............................. 32 3.1.2 带用户控件的代码隐藏 .............. 34 3.2 窗口布局 ......................................... 36 3.2.1 查看窗口和工具栏 ...................... 36 3.2.2 浏览打开的项 .............................. 37 3.2.3 停靠 .............................................. 38 3.3 编辑区域 ......................................... 40 3.3.1 字体和颜色 .................................. 40 3.3.2 可视化指南 .................................. 41 3.3.3 全屏模式 ...................................... 42 3.3.4 跟踪变化 ...................................... 42 3.4 其他选项 ......................................... 43 3.4.1 快捷键 .......................................... 43 3.4.2 项目和解决方案 .......................... 45 3.4.3 Build and Run 界面 ...................... 46 3.4.4 VB 选项 ........................................ 47 3.5 导入和导出设置 ............................ 47 3.6 小结 ................................................. 48 第 4 章 Visual Studio 工作区 .................. 49 4.1 代码编辑器 ..................................... 49 4.1.1 代码编辑器窗口的布局 .............. 49 4.1.2 区域 .............................................. 50 4.1.3 大纲 .............................................. 51 4.1.4 代码的格式化 .............................. 51 4.1.5 向前/向后 ..................................... 53 4.1.6 高级代码编辑器功能 .................. 53 4.1.7 分割视图 ...................................... 54 4.1.8 代码窗口的分离(浮动) ............... 54 4.1.9 创建选项卡组 .............................. 55 4.1.10 高级功能 .................................... 56 4.2 命令窗口 ......................................... 58 4.3 Immediate 窗口 .............................. 59 4.4 Class View 工具窗口 ..................... 60 4.5 Error List 窗口 ................................ 61 4.6 Object Browser 窗口 ...................... 61 4.7 Code Definition 窗口 ..................... 62 4.8 Call Hierarchy 窗口 ........................ 63 4.9 Document Outline 工具窗口 ......... 64 4.9.1 HTML 大纲 .................................. 64 4.9.2 控制大纲 ...................................... 65 4.10 重新安排工具窗口 ...................... 67 4.11 小结 ............................................... 68 第 5 章 查找和替换以及帮助 .................. 69 5.1 Quick Find 与 Quick Replace ........ 69 Visual Studio 2010 高级编程 X 5.1.1 Quick Find .................................... 70 5.1.2 Quick Replace .............................. 70 5.1.3 查找选项 ...................................... 71 5.1.4 通配符 .......................................... 72 5.1.5 正则表达式 .................................. 72 5.1.6 Find and Replace 选项 ................. 74 5.2 文件中查找/替换 ........................... 74 5.2.1 在文件中查找 .............................. 74 5.2.2 查找对话框选项 .......................... 76 5.2.3 结果窗口 ...................................... 76 5.2.4 文件中替换 .................................. 77 5.3 符号查找 ......................................... 77 5.4 Navigate To 功能 ............................ 78 5.5 增量搜索 ......................................... 79 5.6 访问帮助 ......................................... 80 5.6.1 浏览和搜索帮助系统 .................. 81 5.6.2 配置帮助系统 .............................. 81 5.7 小结 ................................................. 82 第Ⅱ部分 入 门 第 6 章 解决方案、项目和项 .................. 85 6.1 解决方案的结构 ............................ 85 6.2 解决方案文件的格式 .................... 86 6.3 解决方案的属性 ............................ 88 6.3.1 常规属性 ...................................... 88 6.3.2 配置属性 ...................................... 88 6.4 项目类型 ......................................... 90 6.5 项目文件格式 ................................ 91 6.6 项目属性 ......................................... 92 6.6.1 Application 选项卡 ...................... 92 6.6.2 Compile 选项卡(仅用于 Visual Basic) ................................. 95 6.6.3 Build 选项卡(仅用于 C#和 F#) ....................................... 97 6.6.4 Build Events 选项卡(仅用于 C#和 F#) ....................................... 98 6.6.5 Debug 选项卡 .............................. 98 6.6.6 References 选项卡(仅用于 Visual Basic) ................................. 99 6.6.7 Resources 选项卡 ...................... 101 6.6.8 Services 选项卡 ......................... 101 6.6.9 Settings 选项卡 ......................... 102 6.6.10 Reference Paths 选项卡(仅 用于 C#和 F#) ......................... 103 6.6.11 Signing 选项卡 ........................ 103 6.6.12 My Extensions 选项卡(仅 用于 Visual Basic) ................... 104 6.6.13 Security 选项卡 ....................... 104 6.6.14 Publish 选项卡 ........................ 105 6.6.15 Code Analysis 选项卡(仅用 于 VSTS Premium 和 Ultimate 版) ............................. 106 6.7 Web 应用程序项目属性 .............. 106 6.7.1 Web 选项卡 .............................. 107 6.7.2 Silverlight Applications 选项卡 ....................................... 107 6.7.3 Package/Publish Web 选项卡 ... 108 6.7.4 Package/Publish SQL 选项卡 ... 109 6.8 Web Site 项目 ............................... 109 6.9 小结 ............................................... 110 第 7 章 IntelliSense 和书签 ................... 111 7.1 IntelliSense 的解释 ....................... 111 7.1.1 通用的 IntelliSense ................... 112 7.1.2 单词和短语的自动完成 ........... 113 7.1.3 参数信息 ................................... 118 7.1.4 快速信息 ................................... 119 7.2 JavaScript Intellisense ................... 119 7.2.1 JavaScript IntelliSense 上下文 ... 120 7.2.2 引用另一个 JavaScript 文件 .... 120 7.3 IntelliSense 选项 ........................... 121 7.2.1 通用选项 ................................... 121 7.2.2 C#的特定选项 .......................... 123 7.4 扩展 IntelliSense ........................... 123 7.3.1 代码片段 ................................... 124 7.3.2 XML 注释 ................................. 124 7.3.3 添加自己的 IntelliSense ........... 124 7.5 书签和 Bookmarks 窗口 .............. 124 目 录 XI 7.6 小结 ............................................... 126 第 8 章 代码片段和重构 ....................... 127 8.1 代码片段概述 .............................. 128 8.1.1 在 Toolbox 中存储代码块 ....... 128 8.1.2 代码片段 ................................... 128 8.1.3 C#中的代码片段 ...................... 129 8.1.4 Visual Basic 中的代码片段 ..... 130 8.1.5 用代码段进行封装 ................... 131 8.1.6 Code Snippets Manager ............ 131 8.1.7 创建代码片段 ........................... 132 8.1.8 查看已有的代码片段 ............... 133 8.2 访问重构支持 .............................. 136 8.3 重构操作 ....................................... 137 8.3.1 Extract Method 重构操作 ......... 137 8.3.2 Encapsulate Field 重构操作 ..... 139 8.3.3 Extract Interface 重构操作 ....... 141 8.3.4 Reorder Parameters 重构操作 .. 143 8.3.5 Remove Parameters 重构操作 ................................... 144 8.3.6 Rename 重构操作 ..................... 144 8.3.7 Promote Variable to Parameter 重构操作 ................................... 145 8.3.8 Generate Method Stub 重构操作 ................................... 146 8.3.9 Organize Usings 重构操作 ....... 147 8.4 小结 ............................................... 148 第 9 章 服务管理 .................................. 149 9.1 Servers 连接 .................................. 149 9.1.1 Event Logs 节点 ........................ 150 9.1.2 Management Classes 节点 ........ 152 9.1.3 Management Events 节点 ......... 154 9.1.4 Message Queues 节点 ............... 157 9.1.5 Performance Counters 节点 ...... 160 9.1.6 Services 节点 ............................. 162 9.2 Data Connections 节点 ................. 163 9.3 SharePoint Connections 节点 ....... 164 9.4 小结 ............................................... 164 第 10 章 用 Class Designer 建模 ......... 165 10.1 创建类图 ..................................... 165 10.2 设计界面 ..................................... 166 10.3 工具箱 ......................................... 167 10.3.1 实体 ........................................ 167 10.3.2 连接器 .................................... 168 10.4 类的细节 ..................................... 168 10.5 Properties 窗口 ........................... 169 10.6 布局 ............................................. 170 10.7 导出类图 ..................................... 170 10.8 代码的生成和重构 .................... 170 10.8.1 拖放式代码生成 .................... 170 10.8.2 IntelliSense 代码生成 ............ 173 10.8.3 用类设计器进行重构 ........... 173 10.9 Modeling PowerToys for Visual Studio .............................. 174 10.9.1 可视化方面的改进 ................ 174 10.9.2 功能方面的改进 .................... 175 10.10 小结 ........................................... 176 第Ⅲ部分 深 入 第 11 章 单元测试 ................................ 179 11.1 第一个测试用例 ......................... 179 11.1.1 使用特性标识测试 ................ 186 11.1.2 其他测试特性 ........................ 187 11.2 指定判断条件 ............................. 189 11.2.1 Assert 类 ................................. 189 11.2.2 StringAssert 类 ....................... 190 11.2.3 CollectionAssert 类 ................ 190 11.2.4 ExpectedException 特性 ........ 190 11.3 初始化和清理 ............................. 192 11.3.1 TestInitialize 和 TestCleanup 特性 ......................................... 192 11.3.2 ClassInitialize 和 ClassCleanup 特性 ................. 192 11.3.3 AssemblyInitialize 和 AssemblyCleanup 特性 .......... 193 11.4 测试环境 ..................................... 193 11.4.1 数据 ........................................ 193 Visual Studio 2010 高级编程 XII 11.4.2 编写测试输出 ........................ 195 11.5 高级单元测试 ............................ 196 11.5.1 定制特性 ................................ 196 11.5.2 测试私有成员 ........................ 198 11.6 测试 Code Contracts ................... 199 11.7 管理大量的测试用例 ................ 201 11.8 小结 ............................................. 202 第 12 章 XML 文档使用注释 ................ 203 12.1 内联注释..................................... 203 12.2 XML 注释 .................................. 204 12.2.1 添加 XML 注释..................... 204 12.2.2 XML 注释标记 ...................... 205 12.3 使用 XML 注释 ......................... 218 12.4 用 Ghostdoc 生成文档 ............... 219 12.5 用 Sandcastle 编译文档 ............. 220 12.6 Task List 注释 ............................. 223 12.7 小结 ............................................. 225 第 13 章 编码一致性工具 ..................... 227 13.1 源控制 ......................................... 227 13.1.1 选择源控制存储库 ............... 228 13.1.2 访问源控制 ............................ 230 13.1.3 源控制的脱机支持 ............... 234 13.2 编码标准..................................... 235 13.2.1 用 FxCop 分析代码 .............. 235 13.2.2 用 StyleCop 指定样式 ........... 238 13.2.3 Code Contracts ....................... 238 13.4 小结 ............................................. 240 第 14 章 用 T4 生成代码....................... 241 14.1 创建 T4 模板 .............................. 241 14.2 T4 构建块 ................................... 245 14.2.1 Expression 块 ......................... 245 14.2.2 Statement 块 ........................... 246 14.2.3 Class Feature 块 ..................... 248 14.3 T4 的工作原理 ........................... 249 14.4 T4 指令 ....................................... 252 14.4.1 template 指令 ......................... 252 14.4.2 output 指令 ............................. 252 14.4.3 assembly 指令 ........................ 252 14.4.4 import 指令 ............................ 253 14.4.5 include 指令 ........................... 254 14.5 疑难解答 ..................................... 255 14.5.1 设计时错误 ............................ 255 14.5.2 编译转换错误 ........................ 255 14.5.3 执行转换错误 ........................ 256 14.5.4 生成的代码错误 .................... 256 14.6 生成代码资源 ............................ 256 14.7 Preprocessed Text Template........ 260 14.7.1 使用 Preprocessed Text Template ................................. 261 14.7.2 与标准 T4 模板的区别 ......... 264 14.8 提示和技巧 ................................. 265 14.9 小结 ............................................. 265 第 15 章 项目和项模板 ......................... 267 15.1 创建模板 ..................................... 267 15.1.1 项模板 .................................... 267 15.1.2 项目模板 ................................ 270 15.1.3 模板结构 ................................ 271 15.1.4 模板参数 ................................ 272 15.1.5 模板位置 ................................ 273 15.2 扩展模板 ..................................... 273 15.2.1 模板项目的安装 .................... 274 15.2.2 IWizard ................................... 275 15.2.3 生成扩展项目模板 ................ 279 15.3 Starter Kits ................................... 281 15.4 联机模板 ..................................... 281 15.5 小结 ............................................. 282 第 16 章 语言相关特性 ......................... 283 16.1 使用正确语言 ............................ 283 16.1.1 命令式语言 ............................ 284 16.1.2 声明式语言 ............................ 284 16.1.3 动态式语言 ............................ 284 16.1.4 函数式语言 ............................ 285 16.1.5 这些类别的含义 .................... 285 16.2 两种语言的选择 ........................ 286 16.2.1 无 PIA 的编译 ....................... 286 目 录 XIII 16.2.2 泛型变体 ................................ 287 16.3 Visual Basic................................. 291 16.3.1 表达式和匿名方法 ............. 291 16.3.2 隐式的续行符 ........................ 292 16.3.3 带初始值的自动属性 ........... 293 16.3.4 集合初始化器和数组 字面量 ..................................... 293 16.3.5 可空的可选参数.................... 294 16.3.6 Visual Basic PowerPack......... 295 16.4 C# ................................................ 295 16.4.1 带动态查找功能的 后期绑定 ................................ 295 16.4.2 命名参数和可选参数 ........... 296 16.5 F# ................................................. 297 16.5.1 第一个 F#程序 ...................... 297 16.5.2 研究 F#语言特性 .................. 300 16.6 小结 ............................................. 301 第Ⅳ部分 富客户端应用程序 第 17 章 Windows Forms 应用程序 ..... 305 17.1 入门 ............................................. 305 17.2 Windows 窗体 ............................ 306 17.2.1 Appearance 属性 ................... 307 17.2.2 Layout 属性 ........................... 307 17.2.3 Window Style 属性 ................ 307 17.3 窗体设计首选项 ........................ 307 17.4 添加和定位控件 ........................ 309 17.4.1 垂直对齐文本控件 ............... 310 17.4.2 自动定位多个控件 ............... 310 17.4.3 控件的 Tab 键顺序和分层 .... 311 17.4.4 锁定控件设计 ........................ 312 17.4.5 设置控件属性 ........................ 312 17.4.6 基于服务的组件.................... 313 17.4.7 智能标签任务 ........................ 314 17.5 容器控件..................................... 314 17.5.1 Panel 和 SplitContainer 控件 ........................................ 314 17.5.2 FlowLayoutPanel 控件 .......... 315 17.5.3 TableLayoutPanel 控件 ......... 316 17.6 停靠和锚定控件 ........................ 316 17.7 小结 ............................................. 317 第 18 章 Windows Presentation Foundation (WPF) .............. 319 18.1 WPF 的概念 ............................... 319 18.2 开始使用 WPF ........................... 321 18.2.1 XAML 基础 ........................... 322 18.2.2 WPF 控件 .............................. 323 18.2.3 WPF 布局控件 ...................... 324 18.3 WPF 设计器和 XAML 编辑器 ......................................... 326 18.3.1 使用 XAML 编辑器 .............. 328 18.3.2 使用 WPF 设计器 ................. 328 18.3.3 Properties 工具窗口............... 330 18.3.4 数据绑定功能 ........................ 333 18.4 设置应用程序的样式 ................ 337 18.5 Windows Forms 的交互 操作性 ......................................... 338 18.5.1 在 Windows Forms 中 承载 WPF 控件 ...................... 338 18.5.2 在 WPF 中承载 Windows Forms 控件 ............ 340 18.6 用 WPF Visualizer 调试 ............. 342 18.7 小结 ............................................. 343 第 19 章 Office 业务应用程序 .............. 345 19.1 选择 Office 项目类型 ................ 345 19.1.1 文档级定制 ............................ 346 19.1.2 应用程序级插件 .................... 347 19.2 创建文档级定制 ........................ 347 19.2.1 第一个 VSTO 项目 ............... 347 19.2.2 保护文档设计 ........................ 350 19.2.3 添加操作窗格 ........................ 351 19.3 创建应用程序级插件 ................ 352 19.3.1 一些 Outlook 概念 ................ 352 19.3.2 创建 Outlook 窗体区域 ........ 353 19.4 调试 Office 应用程序 ................ 356 19.4.1 注销插件 ................................ 357 19.4.2 禁用的插件 ............................ 358 Visual Studio 2010 高级编程 XIV 19.5 部署 Office 应用程序 ................ 359 19.6 小结 ............................................. 360 第Ⅴ部分 Web 应用程序 第 20 章 ASP.NET Web 窗体 ............... 363 20.1 Web Application 项目和 Web Site 项目 ............................. 363 20.2 创建 Web 项目 ........................... 364 20.2.1 创建 Web Site 项目 ............... 364 20.2.2 创建 Web Application 项目 .. 367 20.2.3 其他 Web 项目 ...................... 369 20.2.4 入门套件、社区项目和 开放源代码的应用程序 ........ 369 20.3 设计 Web 窗体 ........................... 370 20.3.1 HTML 设计器 ....................... 370 20.3.2 定位控件和 HTML 元素 ...... 372 20.3.3 格式化控件和 HTML 元素 .... 374 20.3.4 CSS 工具 ................................ 374 20.3.5 验证工具 ................................ 378 20.4 Web 控件 .................................... 379 20.4.1 导航组件 ................................ 379 20.4.2 用户验证 ................................ 380 20.4.3 数据组件 ................................ 381 20.4.4 Web Parts ................................ 384 20.5 主/从页面 ................................... 385 20.6 富客户端开发 ............................ 386 20.6.1 用 JavaScript 开发 ................. 386 20.6.2 使用 ASP.NET AJAX ............ 387 20.6.3 使用 AJAX Control Extenders ................................ 390 20.7 ASP.NET Web 站点管理 ........... 391 20.7.1 安全 ........................................ 392 20.7.2 应用程序设置 ........................ 394 20.7.3 IIS 中的 ASP.NET 配置 ........ 394 20.8 小结 ............................................. 395 第 21 章 ASP NET MVC ...................... 397 21.1 Model-View-Controller .............. 398 21.2 开始使用 ASP.NET MVC ......... 398 21.3 选择 Model ................................. 400 21.4 Controller 和 Action 方法 .......... 400 21.5 用 View 显示 UI ......................... 403 21.6 高级 MVC .................................. 410 21.6.1 路由 ........................................ 410 21.6.2 Action 方法参数 .................... 414 21.6.3 区域 ........................................ 417 21.6.4 验证 ........................................ 420 21.6.5 部分视图 ................................ 421 21.6.6 定制 View 模板 ..................... 422 21.6.7 Dynamic Data 模板 ............... 422 21.6.8 jQuery ..................................... 426 21.7 小结 ............................................. 428 第 22 章 Silverlight ............................... 429 22.1 Silverlight 简介 ........................... 429 22.2 开始使用 Silverlight ................... 430 22.3 Navigation Framework ............... 435 22.4 设置主题 ..................................... 436 22.5 在浏览器外部运行 .................... 438 22.6 小结 ............................................. 440 第 23 章 Dynamic Data ........................ 441 23.1 创建动态数据 Web 应用程序 .................................... 442 23.1.1 添加数据模型 ........................ 443 23.1.2 研究 Dynamic Data 应用程序 ................................ 444 23.2 定制数据模型 ............................ 446 23.2.1 基架各个表 ............................ 446 23.2.2 定制各个数据字段 ................ 446 23.2.3 添加定制的验证规则 ........... 448 23.2.4 定制显示格式 ........................ 450 23.3 定制显示 ..................................... 452 23.3.1 页面模板 ................................ 452 23.3.2 字段模板 ................................ 455 23.3.3 实体模板 ................................ 459 23.3.4 过滤器模板 ............................ 461 23.4 为已有的项目启用动态数据 .... 462 23.5 小结 ............................................. 463 目 录 XV 第 24 章 SharePoint ......................... 465 24.1 准备开发环境 ............................ 466 24.1.1 安装预备软件 ........................ 466 24.1.2 安装 SharePoint 2010 ............ 468 24.2 研究 SharePoint 2010 ................. 469 24.3 创建 SharePoint 项目 ................. 471 24.4 构建定制的 SharePoint 组件 .... 474 24.4.1 开发 Web 部件 ...................... 474 24.4.2 创建内容类型和列表 ........... 475 24.4.3 添加事件接收器.................... 477 24.4.4 创建 SharePoint 工作流 ........ 478 24.5 使用 Feature................................ 479 24.6 打包和部署 ................................ 480 24.7 小结 ............................................. 482 第 25 章 Windows Azure .................. 483 25.1 Windows Azure 平台 ................. 483 25.1.1 Development Fabric .............. 485 25.1.2 表、博客和查询存储器 ....... 486 25.1.3 应用程序部署 ....................... 489 25.1.4 调整应用程序 ....................... 492 25.2 SQL Azure ................................... 492 25.3 AppFabric ................................... 494 25.3.1 Service Bus ............................ 494 25.3.3 访问控制服务 ....................... 494 25.4 小结 ............................................. 494 第Ⅵ部分 数 据 第 26 章 可视化数据库工具 .............. 497 26.1 Visual Studio 2010 中的 数据库窗口 ................................ 497 26.1.1 Server Explorer 窗口............. 498 26.1.2 Data Sources 窗口 ................. 503 26.2 编辑数据..................................... 504 26.3 预览数据..................................... 504 26.4 小结 ............................................. 505 第 27 章 数据集和数据绑定 .................. 507 27.1 DataSet 概述 ............................... 507 27.1.1 添加数据源 ........................... 508 27.1.2 DataSet 设计器 ..................... 510 27.2 绑定数据 ..................................... 513 27.2.1 BindingSource 类 .................. 514 27.2.2 BindingNavigator 类 ............. 516 27.2.3 选择数据源 ........................... 517 27.2.4 保存更改 ............................... 520 27.2.5 插入新记录 ........................... 521 27.2.6 验证 ....................................... 522 27.2.7 定制的 DataSet ..................... 524 27.2.8 BindingSource 链和 DataGridView 控件 ............... 526 27.3 数据源的使用 ............................ 527 27.3.1 Web 服务数据源 ................... 529 27.3.2 浏览数据 ............................... 529 27.4 小结 ............................................. 531 第 28 章 LINQ ...................................... 533 28.1 LINQ 提供程序 .......................... 533 28.2 旧式查询 ..................................... 534 28.3 查询的各个部分 ........................ 536 28.3.1 From 语句 ............................. 536 28.3.2 Select 语句 ............................ 537 28.3.3 Where 语句 ........................... 538 28.3.4 Group By 语句 ...................... 538 28.3.5 定制投射 ............................... 539 28.3.6 Order By 语句 ....................... 540 28.4 调试和执行 ................................. 541 28.5 LINQ to XML 对象模型 ........... 542 28.5.1 VB 的 XML 字面量 ............. 543 28.5.2 把 XML 分析为 XElement .. 543 28.5.2 用 LINQ 创建 XML ............. 545 28.6 查询 XML ................................... 547 28.7 架构支持 ..................................... 548 28.8 LINQ to SQL .............................. 549 28.8.1 创建对象模型 ....................... 549 28.8.2 用 LINQ to SQL 查询........... 551 28.8.3 绑定 LINQ to SQL 对象 ...... 556 28.9 LINQ Pad .................................... 560 28.10 小结 ........................................... 560 Visual Studio 2010 高级编程 XVI 第 29 章 ADO.NET Entity Framework ............................ 561 29.1 Entity Framework ....................... 562 29.1.1 与 LINQ to SQL 比较 .......... 562 29.1.2 Entity Framework 概念 ......... 562 29.2 入门 ............................................. 563 29.3 创建实体模型 ............................ 563 29.3.1 实体数据模型向导 ............... 563 29.3.2 Entity Framework 设计器 .... 566 29.3.3 创建/修改实体 ...................... 569 29.3.4 创建/修改实体关联 .............. 572 29.3.5 实体继承 ............................... 573 29.3.6 验证实体模型 ....................... 573 29.3.7 用数据库修改更新实体 模型 ....................................... 573 29.4 查询实体模型 ............................ 573 29.4.1 LINQ to Entities 概述 ........... 574 29.4.2 获得对象上下文 ................... 574 29.4.3 CRUD 操作 ........................... 574 29.4.4 浏览实体关联 ....................... 578 29.5 高级功能..................................... 580 29.5.1 在实体模型中更新数据库 .. 580 29.5.2 给实体添加业务逻辑 ........... 580 29.5.3 旧的 CLR 对象(POCO) ....... 580 29.6 小结 ............................................. 581 第 30 章 报表 ........................................ 583 30.1 开始使用报表 ............................ 583 30.2 设计报表..................................... 585 30.2.1 定义数据源 ........................... 586 30.2.2 报表控件 ............................... 587 30.2.3 表达式、占位符和聚合 ....... 597 30.2.4 定制代码 ............................... 600 30.2.5 报表布局 ............................... 603 30.2.6 子报表 ................................... 605 30.2.7 Report 向导 ........................... 607 30.3 显示报表..................................... 608 30.3.1 Report Viewer 控件............... 608 30.3.2 生成报表 ............................... 609 30.3.3 把报表显示为不同格式 ....... 610 30.4 部署报表 ..................................... 611 30.5 小结 ............................................. 611 第Ⅶ部分 应用程序服务 第 31 章 Windows Communication Foundation(WCF) ................. 615 31.1 WCF 的概念 ............................... 615 31.2 入门 ............................................. 616 31.3 定义协定 ..................................... 617 31.3.1 创建服务协定 ....................... 617 31.3.2 创建数据协定 ....................... 619 31.4 配置 WCF 服务端点 ................. 620 31.5 承载 WCF 服务 .......................... 623 31.6 用 WCF 服务 .............................. 628 31.7 小结 ............................................. 631 第 32 章 Windows Workflow Foundation(WF).................... 633 32.1 Windows Workflow Foundation 的概念 ......................................... 633 32.2 使用 Windows Workflow 的原因 ......................................... 634 32.3 工作流的概念 ............................ 634 32.3.1 活动 ....................................... 634 32.3.2 控制流活动 ........................... 636 32.3.3 表达式 ................................... 636 32.3.4 工作流运行库/调度器 .......... 636 32.3.5 书签 ....................................... 636 32.3.6 持久化 ................................... 637 32.3.7 跟踪 ....................................... 637 32.4 入门 ............................................. 637 32.5 Workflow Foundation 设计器 ..... 639 32.6 创建工作流 ................................. 642 32.6.1 设计工作流 ........................... 642 32.6.2 编写 Code Activities ............. 644 32.6.3 执行工作流 ........................... 646 32.6.4 调试工作流 ........................... 648 32.6.5 测试工作流 ........................... 648 目 录 XVII 32.7 承载工作流设计器 .................... 649 32.8 小结 ............................................. 653 第 33 章 客户端应用程序服务 .............. 655 33.1 客户端服务 ................................ 655 33.2 角色授权..................................... 658 33.3 用户验证..................................... 660 33.4 设置 ............................................. 662 33.5 登录窗体..................................... 666 33.6 脱机支持..................................... 669 33.7 小结 ............................................. 671 第 34 章 同步服务 ................................ 673 34.1 偶尔连接的应用程序 ................ 673 34.2 Server Direct ............................... 674 34.3 开始使用同步服务 .................... 677 34.4 N 层上的同步服务 .................... 679 34.5 后台同步..................................... 680 34.6 客户端更改 ................................ 682 34.7 小结 ............................................. 683 第 35 章 WCF RIA Services ................. 685 35.1 入门 ............................................. 685 35.2 域服务 ......................................... 687 35.3 域操作 ......................................... 688 35.3.1 查询操作 ............................... 689 35.3.2 插入/更新/删除操作 ............. 689 35.3.3 其他操作类型 ....................... 690 35.4 在 Silverlight 中使用域服务 ..... 690 35.5 小结 ............................................. 694 第Ⅷ部分 配置和资源 第 36 章 配置文件 ................................ 697 36.1 配置文件..................................... 697 36.1.1 machine.config 文件 ............. 697 36.1.2 web.config 文件 .................... 698 36.1.3 app.config 文件 ..................... 698 36.1.4 security.config 文件 .............. 698 36.1.5 applicationHost.config 文件 .... 698 36.2 配置架构..................................... 699 36.2.1 configurationSections 节 ....... 699 36.2.2 startup 节 ............................... 700 36.2.3 runtime 节 .............................. 700 36.2.4 system.runtime.remoting 节 .... 701 36.2.5 system.net 节 ......................... 701 36.2.6 cryptographySettings 节 ........ 702 36.2.7 system.diagnostics 节 ............ 702 36.2.8 system.web 节 ....................... 702 36.2.9 compiler 节 ............................ 703 36.2.10 配置特性 ............................. 703 36.3 应用程序设置 ............................ 705 36.3.1 使用 appSettings 节 .............. 705 36.3.2 项目设置 ............................... 705 36.3.3 动态属性 ............................... 706 36.3.4 自定义配置节 ....................... 707 36.4 用户设置 ..................................... 712 36.5 用设置引用的项目 .................... 713 36.6 小结 ............................................. 714 第 37 章 连接字符串 ............................ 715 37.1 连接字符串向导 ........................ 715 37.2 SQL Server 格式 ......................... 719 37.3 构造代码 ..................................... 720 37.4 加密连接字符串 ........................ 722 37.5 小结 ............................................. 723 第 38 章 资源文件 ................................ 725 38.1 资源的概念 ................................. 725 38.1.1 文本文件资源 ....................... 725 38.1.2 resx 资源文件 ....................... 727 38.1.3 二进制资源文件 ................... 727 38.1.4 添加资源 ............................... 727 38.1.5 嵌入文件作为资源 ............... 728 38.1.6 资源命名 ............................... 728 38.1.7 访问资源 ............................... 729 38.1.8 设计器文件 ........................... 730 38.2 为应用程序提供资源 ................ 730 38.3 辅助资源 ..................................... 732 38.3.1 区域 ....................................... 732 38.3.2 创建区域性资源 ................... 733 Visual Studio 2010 高级编程 XVIII 38.3.3 加载区域资源文件 ............... 733 38.3.4 辅助区域资源 ....................... 734 38.4 访问细节..................................... 734 38.4.1 加载位图和图标 ................... 734 38.4.2 跨程序集引用 ....................... 735 38.4.3 ComponentResourceManager 对象 ........................................ 735 38.5 编码资源文件 ............................ 736 38.5.1 ResourceReader 和 ResourceWriter ...................... 736 38.5.2 ResxResourceReader 和 ResxResourceWriter .............. 736 38.6 定制资源..................................... 737 38.7 小结 ............................................. 740 第Ⅸ部分 调 试 第 39 章 使用调试窗口 ......................... 745 39.1 代码窗口..................................... 745 39.1.1 断点 ....................................... 745 39.1.2 数据提示 ............................... 746 39.2 Breakpoints 窗口 ........................ 746 39.3 Output 窗口 ................................ 747 39.4 Immediate 窗口 .......................... 747 39.5 监视窗口..................................... 749 39.5.1 QuickWatch 窗口 .................. 749 39.5.2 Watch 1-4 窗口...................... 749 39.5.3 Autos 窗口和 Locals 窗口 ... 750 39.6 代码执行窗口 ............................ 750 39.6.1 Call Stack 窗口 ...................... 750 39.6.2 Threads 窗口 ......................... 751 39.6.3 Modules 窗口 ........................ 751 39.6.4 Processes 窗口 ...................... 752 39.7 内存窗口..................................... 752 39.7.1 Memory 1-4 窗口 .................. 752 39.7.2 Disassembly 窗口 ................. 752 39.7.3 Registers 窗口 ....................... 753 39.8 IntelliTrace (仅用于 Ultimate 版本) ............................. 753 39.9 并行调试窗口 ............................ 754 39.9.1 Parallel Stacks 窗口 ............... 755 39.9.2 Parallel Tasks 窗口 ................ 756 39.10 Exceptions 窗口 ........................ 756 39.10.1 定制 Exception Assistant ... 758 39.10.2 展开异常 ............................. 759 39.11 小结 ........................................... 759 第 40 章 断点调试 ................................ 761 40.1 断点 ............................................. 761 40.1.1 设置断点 ............................... 761 40.1.2 为断点指定条件 ................... 763 40.1.3 过滤 ....................................... 765 40.1.4 断点操作 ............................... 766 40.2 跟踪点 ......................................... 767 40.2.1 创建跟踪点 ........................... 767 40.2.2 跟踪点操作 ........................... 768 40.3 执行点 ......................................... 769 40.3.1 代码的执行 ........................... 769 40.3.2 移动执行点 ........................... 770 40.4 Edit and Continue 功能 .............. 770 40.4.1 原始编辑 ............................... 771 40.4.2 停止应用修改 ....................... 771 40.5 小结 ............................................. 771 第 41 章 数据提示、调试代理和 可视化工具 ............................ 773 41.1 数据提示 ..................................... 773 41.2 调试器特性 ................................. 774 41.2.1 DebuggerBrowsable 特性 ..... 775 41.2.2 DebuggerDisplay 特性 .......... 775 41.2.3 DebuggerHidden 特性 .......... 776 41.2.4 DebuggerStepThrough 特性 .... 777 41.2.5 DebuggerNonUserCode 特性 ....................................... 778 43.2.6 DebuggerStepperBoundary 特性 ....................................... 778 41.3 类型代理 ..................................... 778 41.4 可视化工具 ................................. 780 41.5 高级技术 ..................................... 783 41.6 小结 ............................................. 784 目 录 XIX 第 42 章 调试 Web 应用程序 ................ 785 42.1 调试服务器端的 ASP.NET 代码 ............................................. 785 42.1.1 Web 应用程序异常 .............. 787 42.1.2 Edit and Continue 功能 ......... 789 42.1.3 错误处理 ............................... 789 42.2 调试客户端的 JavaScript .......... 790 42.2.1 在 JavaScript 代码中设置 断点 ........................................ 791 42.2.2 调试动态生成的 JavaScript 代码 ........................................ 791 42.2.3 调试 ASP.NET AJAX JavaScript ............................... 792 42.3 调试 Silverlight ........................... 792 42.4 跟踪 ............................................. 793 42.4.1 页面级别的跟踪 ................... 793 42.4.2 应用程序级别的跟踪 ........... 794 42.4.3 跟踪输出 ............................... 795 42.4.4 跟踪查看器 ........................... 795 42.4.5 自定义跟踪输出 ................... 796 42.5 运行状况监视 ............................ 796 42.6 小结 ............................................. 798 第 43 章 高级调试技术 ......................... 799 43.1 启动操作..................................... 799 43.2 用代码调试 ................................ 801 43.2.1 Debugger 类 .......................... 801 43.2.2 Debug 类和 Trace 类 ............ 802 43.3 调试运行着的应用程序 ............ 803 43.3.1 附加 Windows 进程 ............. 804 43.3.2 附加 Web 应用程序 ............. 805 43.3.3 远程调试 ............................... 806 43.4 .NET Framework 源 ................... 807 43.5 多线程和并行应用程序的 调试 ............................................. 809 43.6 调试 SQL Server 存储过程 ....... 810 43.7 混合模式的调试 ........................ 810 43.8 post-mortem 调试 ....................... 811 43.8.1 生成转储文件 ........................ 811 43.8.2 调试转储文件 ....................... 812 43.9 小结 ............................................. 813 第Ⅹ部分 构建和部署 第 44 章 升级到 Visual Studio 2010 ..... 817 44.1 从 Visual Studio 2008 升级 ........ 817 44.2 升级到.NET Framework 4.0 ...... 820 44.3 小结 ............................................. 821 第 45 章 定制构建 ............................ 823 45.1 通用构建选项 ............................ 823 45.2 手动配置依赖关系 .................... 826 45.3 Visual Basic 编译页面 ............... 826 45.3.1 高级编译器设置 ................... 827 45.3.2 构建事件 ............................... 829 45.4 C#构建页面 ................................ 830 45.5 MSBuild ...................................... 832 45.5.1 Visual Studio 使用 MSBuild 的方式 ................................... 832 45.5.2 MSBuild 模式 ....................... 835 45.5.3 通过 MSBuild 任务设置 程序集的版本 ....................... 836 45.6 小结 ............................................. 837 第 46 章 程序集的版本和签名 .............. 839 46.1 程序集的命名 ............................ 839 46.2 版本的一致性 ............................ 841 46.3 强名程序集 ................................. 842 46.4 全局程序集缓存 ........................ 843 46.5 对程序集进行签名 .................... 843 46.6 小结 ............................................. 845 第 47 章 混淆、应用程序监控和管理 .... 847 47.1 MSIL 反汇编器 .......................... 847 47.2 反编译器 ..................................... 849 47.3 模糊处理代码 ............................ 850 47.3.1 Dotfuscator Software Services ................................. 850 47.3.2 模糊处理特性 ....................... 854 47.3.3 警告 ....................................... 856 Visual Studio 2010 高级编程 XX 47.4 应用程序监控和管理 ................ 857 47.4.1 防篡改功能 ........................... 858 47.4.2 运行期间的智能测试和 分析功能 ............................... 859 47.4.3 应用程序终止 ....................... 863 47.4.4 应用程序的使用情况跟踪 .. 864 47.5 小结 ............................................. 865 第 48 章 打包和部署 ......................... 867 48.1 Windows 安装程序 .................... 867 48.1.1 构建安装程序 ....................... 867 48.1.2 定制安装程序 ....................... 872 48.1.3 添加自定义操作 ................... 875 48.1.4 服务安装程序 ....................... 877 48.2 ClickOnce 技术 .......................... 880 48.2.1 部署 ....................................... 880 48.2.2 升级 ....................................... 884 48.3 小结 ............................................. 885 第 49 章 Web 应用程序的部署 ............. 887 49.1 Web Site 项目的部署 ................. 887 49.1.1 发布 Web 站点 ...................... 888 49.1.2 复制 Web 站点 ...................... 888 49.2 Web Application 项目的部署 .... 889 49.2.1 发布 Web 应用程序 ............. 889 49.2.2 打包 Web 应用程序 ............. 890 49.2.3 web.config 文件转换 ............ 892 49.3 Web 项目安装程序 .................... 893 49.4 Web 平台安装程序 .................... 894 49.5 小结 ............................................. 898 第Ⅺ部分 定制和扩展 Visual Studio 第 50 章 自动化模型 ............................. 901 50.1 Visual Studio 扩展选项 .............. 901 50.2 Visual Studio 自动化模型 .......... 902 50.2.1 自动化模型概述 ................... 902 50.2.2 解决方案和项目 ................... 904 50.2.3 窗口和文档 ........................... 904 50.2.4 命令 ....................................... 905 50.2.5 调试器 ................................... 906 50.2.6 事件 ....................................... 906 50.3 小结 ............................................. 907 第 51 章 插件 ....................................... 909 51.1 开发插件 ..................................... 909 51.1.1 插件向导 ............................... 909 51.1.2 项目结构 ............................... 912 51.1.3 测试插件 ............................... 913 51.1.4 .AddIn 文件 ........................... 914 51.1.5 Connect 类 ............................. 915 51.1.6 创建工具窗口 ....................... 915 51.1.7 访问 Visual Studio 自动化 模型 ....................................... 918 51.1.8 处理 Visual Studio 事件 ....... 919 51.2 部署插件 ..................................... 922 51.3 小结 ............................................. 922 第 52 章 宏 ........................................... 923 52.1 理解宏 ......................................... 923 52.2 Macro Explorer 工具窗口 .......... 924 52.3 Macros IDE ................................. 924 52.4 创建宏 ......................................... 925 52.4.1 记录宏 ................................... 925 52.4.2 开发宏 ................................... 926 52.5 运行宏 ......................................... 927 52.6 部署宏 ......................................... 927 52.7 小结 ............................................. 928 第 53 章 Managed Extensibility Framework (MEF) ................ 929 53.1 MEF 入门 ................................... 930 53.1.1 导入和导出 ........................... 931 53.1.2 协定 ....................................... 933 53.1.3 目录 ....................................... 935 53.1.4 高级 MEF .............................. 936 53.2 Visual Studio 2010 编辑器 ......... 936 53.2.1 文本模型子系统 ................... 936 53.2.2 文本视图子系统 ................... 937 53.2.3 分类子系统 ........................... 938 53.2.4 操作子系统 ........................... 938 目 录 XXI 53.3 扩展编辑器 ................................ 938 53.3.1 编辑器扩展点 ....................... 939 53.3.2 编辑器服务 ........................... 943 53.3.3 Check Comment Highlighter 扩展 ........................................ 943 53.4 小结 ............................................. 949 第Ⅻ部分 Visual Studio Ultimate 第 54 章 Visual Studio Ultimate for Architects ............................... 953 54.1 项目建模..................................... 953 54.1.1 UML 图 ................................. 954 54.1.2 UML Model Explorer 工具窗口 ............................... 958 54.1.3 使用分层图验证应用程序 体系结构 ............................... 959 54.4.4 链接到 Team Foundation Server 上 ................................ 960 54.2 研究代码..................................... 961 54.2.1 Architecture Explorer 窗口 ... 961 54.2.2 依赖关系图 ........................... 962 54.2.3 生成序列图 ........................... 964 54.3 小结 ............................................. 964 第 55 章 Visual Studio Ultimate for Developers ............................ 965 55.1 代码度量..................................... 965 55.1.1 代码行 ................................... 966 55.1.2 继承的深度 ........................... 967 55.1.3 类耦合 ................................... 967 55.1.4 圈复杂性 ............................... 967 55.1.5 可维护性指数 ....................... 967 55.1.6 去除的代码 ........................... 967 55.2 托管代码分析工具 .................... 967 55.3 C/C++代码分析工具 ................. 968 55.4 分析工具..................................... 969 55.4.1 配置 Profiler 会话 ................. 969 55.4.2 报表 ....................................... 970 55.5 独立的探查器 ............................ 972 55.6 IntelliTrace 工具 ......................... 972 55.7 数据库工具 ................................. 974 55.7.1 SQL-CLR 数据库项目 ......... 974 55.7.2 脱机数据库架构 ................... 974 55.7.3 Data Generation 工具 ............ 976 55.7.4 数据库重构 ........................... 978 55.7.5 Schema Compare 工具 ......... 978 55.7.6 Data Compare 工具 ............... 979 55.7.7 静态分析 ............................... 980 55.7.8 T-SQL 编辑器 ....................... 980 55.7.9 最佳实践 ............................... 980 55.8 小结 ............................................. 981 第 56 章 Visual Studio Ultimate for Testers ............................. 983 56.1 自动测试 ..................................... 983 56.1.1 Web 性能测试 ....................... 984 56.1.2 负载测试 ............................... 986 56.1.3 测试负载代理 ....................... 987 56.1.3 数据库单元测试 ................... 987 56.1.4 编码 UI 测试 ......................... 988 56.1.5 一般测试 ............................... 989 56.1.6 有序测试 ............................... 989 56.2 关联代码和测试 ........................ 989 56.2.1 Code Coverage 工具 ............. 990 55.2.2 Test Impact Analysis 工具 .... 991 56.3 Visual Studio 测试管理 .............. 992 56.4 Test and Lab Manager 工具 ....... 993 56.4.1 Testing Center ........................ 993 56.4.2 Lab Center ............................. 995 56.5 小结 ............................................. 996 第 57 章 Team Foundation Server ....... 997 57.1 团队项目 ..................................... 998 57.2 过程模板 ..................................... 998 57.3 工作项跟踪 ................................. 999 57.3.1 工作项查询 ........................... 999 57.3.2 工作项类型 ......................... 1001 57.3.3 添加工作项 ......................... 1001 57.3.4 工作项状态 ......................... 1002 Visual Studio 2010 高级编程 XXII 57.4 Excel 和 Project 集成 ............... 1002 57.4.1 Excel .................................... 1002 57.4.2 Project .................................. 1003 57.5 版本控制................................... 1004 57.5.1 在 Solution Explorer 中工作 ............................ 1005 57.5.2 签出 ..................................... 1006 57.5.3 签入 ..................................... 1007 57.5.4 解决冲突 ............................. 1007 57.5.5 脱机工作 ............................. 1009 57.5.6 标签 ..................................... 1009 57.5.7 历史 ..................................... 1010 57.5.8 批注 ..................................... 1010 57.5.9 搁置 ..................................... 1011 57.5.10 分支 ................................... 1011 57.5.11 合并 ................................... 1013 57.6 Team Foundation Build ............ 1013 57.7 报表和商业智能 ...................... 1016 57.8 团队门户 ................................... 1017 57.8.1 文档 ..................................... 1017 57.8.2 过程指导 ............................. 1017 57.8.3 SharePoint 列表................... 1017 57.8.4 仪表盘 ................................. 1017 57.9 Team System Web Access ........ 1018 57.10 管理 TFS ................................. 1019 57.11 TFS 自动化和过程定制 ........ 1020 57.11.1 工作项类型 .................... 1020 57.11.2 定制过程模板 ................ 1021 57.12 小结 ......................................... 1021 快 速 入 门 本章内容 ● 安装并开始使用 Visual Studio 2010 ● 创建并运行第一个应用程序 ● 调试并部署应用程序 自从开始开发软件以来,就需要使用工具来帮助我们编写、编译、调试和部署应用程序。Microsoft Visual Studio 2010 是最佳组合的集成开发环境(Intergrated Development Environment,IDE)继续演化 的下一个版本。 本章介绍 Visual Studio 2010 的用户操作,并学习使用各种菜单、工具栏和窗口。作为 IDE 的快 速入门,本章不会详细列举每一个可以更改的设置,也不会介绍如何自定义 IDE 的布局,这些话题 会在后面的章节讨论。 1.1 入门 每次发布 Visual Studio 产品时,安装过程都会改进,现在安装和运行 Visual Studio 2010 非常简 单。本节介绍安装过程,并开始使用 IDE。 1.1.1 安装 Visual Studio 2010 启动 Visual Studio 2010 安装程序时,会显示如图 1-1 所示的对话框,其中显示了 3 个产品安装 阶段。第一个阶段是安装该产品,其他两个阶段是可选的。可以在本地安装产品文档,或者使用在 线版本(一般会随时更新)。建议搜索已发布的服务,因为这可以确保使用产品和相关工具的最新 版本。 1 第 章 第Ⅰ部分 集成开发环境 4 图 1-1 在安装过程中会提示用户给 Microsoft 公司提供反馈(如图 1-2(a)所示),并接受该产品的许可条 款(如图 1-2(b)所示)。 图 1-2 Visual Studio 2010 安装过程为两类一般的开发人员进行了优化:编写托管代码或.NET 应用程序 的开发人员和编写本机代码或 C++应用程序的开发人员(如图 1-3(a)所示)。Customize 按钮用于从图 1-3(b)所示的完整的组件树中选择组件。 图 1-3 (a) (b) (a) (b) 第 1 章 快 速 入 门 5 一旦选择了要安装的组件,就会显示图 1-4(a)所示的更新进度对话框。根据已安装到计算机上的组 件,安装过程可能会提示用户重启计算机。安装好所有的组件后,会显示图 1-4(b)所示的汇总对话框。 应该检查其中的内容,确保安装过程不出错。 图 1-4 1.1.2 运行 Visual Studio 2010 每次启动 Visual Studio 时,都会显示 Microsoft Visual Studio 2010 闪屏。与大多数闪屏一样, Microsoft Visual Studio 2010 闪屏也显示了该产品的版本、已得到授权的用户等信息,如图 1-5 所示。 图 1-5 闪屏的一个有趣之处是现在 Visual Studio 大都使用 WPF 显示其内容,但 Visual Studio 2010 中的闪屏仍使用本机代码编写,所以启动 Visual Studio 后,会很快显示闪 屏。手工制作闪屏底部的波浪花了很多时间,所以在耐心等待 Visual Studio 加载时, 肯定会对此感到惊奇。 (a) (b) 第Ⅰ部分 集成开发环境 6 第一次运行 Visual Studio 2010 时,闪屏仅显示一会儿,之后屏幕就会提示选择默认的环境设置。 让没有使用过某产品的人想象一下如何使用该产品是不可能的。Microsoft 公司把许多语言和技术都 融入到一个 IDE 中,所以该 IDE 必须考虑到开发人员在工作方式上的微妙(有时不那么微妙)区别。 如果花点时间看看图 1-6 中所列出的各个选项,就会发现受影响的环境设置包括各个窗口、菜 单、工具栏、快捷键的位置和可见性。例如,如果选择 General Development Settings 选项作为默认 设置,该屏幕就会描述将要应用的这个改变。第 3 章介绍了如何在以后的阶段中改变默认的环境 设置。 图 1-6 1.2 Visual Studio IDE 根据所选的环境设置,单击 Start Visual Studio 按钮时,会显示一个对话框,指示 Visual Studio 正在配置开发环境。当该过程完成时,将打开 Visual Studio 2010,您就可以开始工作了,如图 1-7 所示。 使用 Visual Studio 以前版本的 Visual Basic .NET 开发人员要注意,不要使用 Visual Basic Development Settings 选项,这个选项是为 VB6 开发人员配置的,它只会激怒 Visual Basic .NET 开发人员,因为 Visual Basic .NET 开发人员要使用不同的快捷键映 射。建议使用 General Development Settings 选项,因为这些设置会使用标准的键盘映 射,而无需转而使用另一种开发语言。 第 1 章 快 速 入 门 7 图 1-7 无论选择什么环境设置,在屏幕的中心都会显示 Start Page。但是,Start Page 的内容和周围的 工具栏和工具窗口可以变化。 在开始构建第一个应用程序之前,应先回过头来看看组成 Visual Studio 2010 IDE 的组件。菜单 和工具栏位于 IDE 的顶部,一系列子窗口或窗格显示在主窗口区域的左边、右边和底部。在其中心 是主编辑区域:只要打开代码文件、XML 文档、窗体或其他文件,它们都会显示在这个区域中以 供编辑。每打开一个文件都会创建一个新的选项卡,以便在这些打开的文件之间切换。 在编辑区域的两边是一组工具窗口:这些区域提供了额外的上下文信息和功能。对于一般的开 发人员设置,默认的布局包括:右边有 Solution Explorer 和 Class View,左边有 Server Explorer 和 Toolbox。左边的工具窗口处于折叠状态(或取消固定)。如果单击某个工具窗口的标题,该窗口就会 展开,当它不再是焦点或把光标移动到屏幕的另一个区域时,该窗口会再次折叠起来。工具窗口展 开时,在其右上角会显示 3 个图标,如图 1-8(a)所示。 如果希望工具窗口保持展开状态(或固定),可以单击中间的图标,它看起来像一个图钉。当这 个图钉旋转 90°时,表示该窗口现在被固定了。单击第 3 个图标“×”,就会关闭窗口。如果以后 要再次打开这个窗口或另一个工具窗口,可以从 View 菜单中选择。 如果单击带 Download the latest information for developers to the Start Page 文本的灰 框矩形,就会在指定的环境设置中显示指定的 RSS 源(feed)中的新闻项。每一项都显 示在矩形的汇总中,单击它就会显示完整的文章。只要在 Tools 菜单上选择 Options 命令,在 Options 对话框中修改 Environment | Startup 节点的 Start Page News Channel 属性,就可以定制这个源。 第Ⅰ部分 集成开发环境 8 图 1-8 图 1-8(b)是单击第一个图标(下向箭头)时显示的上下文菜单。这个列表中的每一项都表示工具窗 口的一种不同的排列方式。Float 选项可以把工具窗口放在屏幕的任意位置,独立于主 IDE 窗口。如 果有多个屏幕,Float 选项比较有效,因为可以把各个工具窗口移动到附加屏幕上,让编辑区域使用 最大的屏幕空间。选择 Tabbed Document 选项会把工具窗口变成编辑区域的一个附加选项卡。第 4 章将学习如何通过停靠和固定工具窗口来高效地管理工作区域。 开发、构建和调试第一个应用程序 概览了 Visual Studio 2010 IDE 之后,就要创建一个简单的应用程序来演示如何使用这些组件。 当然,这是每个开发人员都必须掌握的 Hello World 示例,根据用户的习惯,可以用 Visual Basic.NET 或 C#来完成。 (1) 首先选择 File | New | Project 命令,打开 New Project 对话框,如图 1-9 所示。如果读者使用 过 Visual Studio 的以前版本,就会注意到这个对话框有重大变化。对话框的左边仍有一个树根据语 言和技术组合模板,在右上角还有一个搜索框。这个对话框的右面板显示了所选项目模板的其他信 息。最后,使用对话框顶部的下拉列表,可以选择应用程序所面向的.NET Framework 版本。 图 1-9 一些工具窗口不能通过 View 菜单来访问。例如,与调试相关的窗口,如线程和 观察窗口。在大多数情况下,这些窗口可以通过另一个菜单项来访问。对于调试窗口 而言就是 Debug 菜单。 (a) (b) 第 1 章 快 速 入 门 9 从 Templates 区域中选择 WPF Application(这一项在根节点 Visual Basic 和 Visual C#下,或在子 节点 Windows 下),把 Name 设置为 GettingStarted,之后单击 OK 按钮。这将创建一个新的 WPF 应 用程序项目,它包括一个开始窗体并包含在解决方案 GettingStarted 中,如图 1-10 的 Solution Explorer 窗口所示。这个开始窗体自动在可视化设计器中打开,给出了运行应用程序时窗体的图形化外观。 注意,Properties 工具窗口显示在右边的工具窗口区域。 图 1-10 (2) 单击 Toolbox 工具窗口,展开该窗口,并用图钉图标固定该工具窗口。要在窗体中添加控件, 可以从 Toolbox 中选择相应的项并拖放到窗体上。还可以双击该项,Visual Studio 会自动把它们添加 到窗体上。 (3) 在窗体上添加一个按钮和一个文本框,布局应如图 1-11 所示。选择文本框,再选择 Properties 工具窗口(按下 F4 键会自动打开 Properties 工具窗口)。把该控件的名称设置为 txtSayHello。对按钮 控件重复这个操作,把它命名为 btnSayHello,其 Content 属性设置为“Say Hello!”。 图 1-11 第Ⅰ部分 集成开发环境 10 在 Name 字段下面的搜索字段中输入一个属性名,就可以快速定位该属性。在图 1-11 中输入了 Conten,以缩短 Properties 列表,更容易找到 Content 属性。 另外要注意,在窗体上添加控件后,选项卡的文本后面就会加上星号(*),表示这个选项卡有未 保存的修改。如果试图在修改内容处于挂起状态时关闭这个选项卡,Visual Studio 就会询问是否要 保存这些修改。构建应用程序时,任何未保存的文件都会自动保存为构建过程的一部分。 (4) 取消对所有控件的选择,再双击按钮。这不仅会在代码编辑器中打开这个窗体的隐藏代码 文件,还会给按钮创建 Click 事件的处理程序。添加一行代码,给用户回应一条消息,代码窗口如 图 1-12 所示。 图 1-12 (5) 在构建并执行应用程序之前,把光标放在包含 Messagebox.Show 的代码行上,按下 F9 键。 这将设置一个断点——按下 F5 键运行应用程序,然后单击 Say Hello!按钮后,会在这一行上暂停 应用程序的执行。图 1-13 说明到达这个断点。把鼠标指针移动到这一断点行上,就会出现一个数据 提示,显示 txtSayHello.Text 属性的内容。 在图 1-13 中,Visual Studio 的布局与前面的截图完全不同,因为在这个屏幕的下面显示了许多 新的工具窗口,在顶部显示了新的命令栏。当停止应用程序时,Visual Studio 会返回以前的布局。 Visual Studio 2010 维护着两个分开的布局:设计时布局和运行时布局。当编辑项目时,菜单、工具 栏和各个窗口使用默认布局,而执行和调试项目时,它们都定义了一个不同的设置。可以修改这些 布局,以适应自己的风格,Visual Studio 2010 会记住这些修改。 需要注意的是在 Visual Studio 2010 中进行修改时,一些文件也会改变,如解决方 案文件,但不显示任何已改变的指示。如果要退出应用程序或关闭解决方案,Visual Studio 仍会提示保存这些修改。 第 1 章 快 速 入 门 11 图 1-13 (6) 最后一步是部署应用程序。为了是使用 Windows Forms 或 WPF 构建富客户端应用程序还是 构建 Web 应用程序,Visual Studio 2010 都可以发布该应用程序。在 Solution Explorer 中双击 Properties 节点,选择 Publish 节点,就会显示发布应用程序的选项,如图 1-14 所示。 图 1-14 在图 1-14 中,发布文件夹设置为一个本地路径,但可以指定网络文件夹、IIS 文件夹或 FTP 站 第Ⅰ部分 集成开发环境 12 点。一旦指定了要发布的位置,单击 Publish Now 按钮就会把应用程序发布到该位置。 1.3 小结 本章学习了 Visual Studio 2010 的各个组件如何协调工作以构建应用程序。下面列出了创建解决 方案的一般过程: (1) 用 File 菜单创建解决方案。 (2) 用 Solution Explorer 定位需要编辑的窗体,双击该项,在主工作区域显示它。 (3) 把需要的组件从 Toolbox 拖放到窗体上。 (4) 依次选择窗体和各个组件,在 Properties 窗口中编辑属性。 (5) 双击窗口或控件,访问组件图形化界面后面的代码。 (6) 用主工作区域编写代码,并设计图形化界面,在该区域的顶部通过选项卡切换它们。 (7) 用工具栏启动程序。 (8) 如果出错,就在 Error List 和 Output 窗口中复查。 (9) 用工具栏或菜单命令保存项目,并退出 Visual Studio 2010。 在后面的章节中将学习如何定制 IDE,使之更符合自己的工作风格,并说明 Visual Studio 2010 完成了应用程序开发过程的大量工作。本书还会介绍作为开发人员使用 Visual Studio 2010 时可重用 的许多最佳实践。 Solution Explorer、Toolbox 和 Properties 窗口 本章内容 ● 使用 Solution Explorer 排列文件 ● 给解决方案添加项目、项和引用 ● 使用 Properties 工具窗口 ● 在 Properties 工具窗口中包含自己的属性 第 1 章简要介绍了组成 Visual Studio 2010 IDE 的许多组件。现在要使用其中 3 个最常用的工具 窗口:Solution Explorer、Toolbox 和 Properties。 本章和后面的章节会提及一些键盘快捷键,如按下 Ctrl+S 组合键。在这种情况下,本书假定使 用一般开发设置,如第 1 章所述。其他配置可能有不同的按键组合。 2.1 Solution Explorer 窗口 只要创建或打开应用程序,或者仅打开一个文件,Visual Studio 2010 就会使用解决方案的概念。 一般情况下,解决方案由一个或多个项目组成,而每个项目可以包含与之相关的多个项。过去,这 些项一般是文件,但越来越多的项目包含的项有时是由多个文件组成的,有时根本就不是文件。第 6 章将详细介绍项目、解决方案的结构,以及这些项的相互关系。 Solution Explorer 工具窗口(Ctrl+Alt+L 组合键)提供了解决方案、项目和各个项的可视化表示, 如图 2-1 所示。在这个图中,3 个项目显示为树型结构:C# WPF 应用程序、C# WCF 服务库和一个 VB 类库。 2 第 章 第Ⅰ部分 集成开发环境 14 图 2-1 每个项目都有一个相关的图标,它一般表示项目的类型和编写它所用的语言。这个规则有一些 例外,如安装项目就没有指定语言。 有一个节点要特别注意,因为其字体为黑体。这表示这个项目是启动项目—— 换言之,选择 Debug | Start Debugging 或按下 F5 键时,就会启动这个项目。要更改启动项目,可以右击要设置的 项目,并选择 Set as StartUp Project 命令。要将多个项目设为启动项目,可以通过从解决方案节点的 右击菜单中选择 Properties 命令,再打开 Solution Properties 对话框。 Solution Explorer 顶部的工具栏可以定制窗口内容的显示方式,并为各个项的不同视图提供快捷 键。例如,第一个按钮 Show All Files 会展开解决方案列表来显示其他文件和文件夹,如图 2-2 所示。 My Project 节点实际上由多个文件组成,文件包含设置、资源和程序集的信息。 图 2-2 在一些环境设置下(参见 1.1 节),当解决方案只有一个项目时,解决方案节点是不 可见的。这样就不能打开 Solution Properties 窗口。为了显示解决方案节点,可以在解 决方案中添加另一个项目,或者选择 Tools | Options,在打开的 Options 对话框中选择 Projects and Solutions 节点中的 Always Show Solution 项。 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 15 在这个展开的视图中,可以看到项目结构下面的所有文件和文件夹。但如果文件系统改变,那 么 Solution Explorer 不会自动更新,以反映这些改变。第二个按钮 Refresh 可以确保显示文件和文件 夹的正确列表。 Solution Explorer 工具栏与上下文相关,根据所选节点的类型显示不同的按钮。图 2-2 选择了未 包含在项目中的一个文件夹(图标的颜色为淡色),则图 2-1 中的其他按钮都不可见。简言之,这些按 钮在可见时,可用于查看代码(这里是 Window1.xaml.cs 文件),打开设计器,将显示 Window1.xaml 文件的设计和 xaml 视图。图 2-2 还显示了 Class Diagram 按钮。 常见任务 Solution Explorer 除了为管理项目和各个项提供了一种方便的方式之外,还有一个动态的上下文 菜单,它能快速完成一些最常见的任务,如构建解决方案或单独的项目、访问构建配置管理器、打 开文件等。图 2-3 显示该上下文菜单随 Solution Explorer 中所选项的不同而不同。 图 2-3 左边和中间菜单上的第一项用于构建整个解决方案或选中的项目。在大多数情况下,选择 Build 菜单项是最高效的选项,因为它仅构建有变化的项目。但是,在一些情况下,无论项目的状态如何, 都需要重建所有的相关项目。如果要删除构建过程中创建的所有其他文件,可以调用 Clean 菜单项。 这个选项可以打包解决方案,并用电子邮件的方式把它传送给其他人—— 这种方式不会包含构建过 如果项目中还没有类图,单击 View Class Diagram 按钮可以插入一个类图,并自 动添加所有的类。对于有许多类的项目而言,这相当耗时,而且得到一个又大又不实 用的类图。一般最好是手动添加一个或多个类图,从而进行全面的控制。 第Ⅰ部分 集成开发环境 16 程创建的所有临时或输出文件。 对于 Solution Explorer 中的大多数项,上下文菜单的第一部分如图 2-3 右边的菜单所示,其中有 默认的 Open 菜单项和 Open With...菜单项,它们可以确定项的打开方式。在处理 XML 资源文件时, 这些菜单项是很有用的。Visual Studio 2010 使用内置的资源编辑器打开这个文件类型,但这会禁止 进行某些修改,也不支持我们可能要包含的所有数据类型(第 38 章会讨论如何在资源文件中使用自 己的数据类型)。使用 Open With...菜单项可以代替使用 XML Editor。 1. 添加项目和项 在 Solution Explorer 中,最常执行的操作是添加、删除和重命名项目和项。要在已有的解决方 案中添加新项目,应从解决方案节点的上下文菜单中选择 Add | New Project 命令,打开如图 2-4 所 示的对话框,该对话框与 Visual Studio 的以前版本相比有几个小变化。现在这个对话框可以对项目 模板排序,搜索项目模板。右边的窗格显示了所选项目的信息,如项目的类型及其描述(第 15 章介 绍了如何创建自己的项目模板和项模板,包括设置这些属性)。 图 2-4 在 Add New Project 对话框左边的 Installed Templates 类型层次结构中,模板先按语言排列,再 按技术排列。其中包括 Office 项目类型,允许为大多数 Office 产品构建应用程序级和文档级的插件。 Office 插件仍使用 Visual Studio Tools for Office (VSTO),它现在内置于 Visual Studio 2010 中,而不 再需要其他的安装程序。第 19 章将介绍如何使用这些项目类型为 Office 核心应用程序构建插件。 还有 Recent Templates和Online Templates选项卡,Online Templates的排序和搜索方式类似于Installed Templates,但排序条件扩展为包含创建日期、排名和下载频率。 Solution、Project 和 Folder 节点的上下文菜单包含 Open Folder in Windows Explorer 项。它可以打开 Windows Explorer、快速定位所选项的位置,而无需导航到解决方案 所在的位置,再查找对应的子文件夹。 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 17 在 Add New Project 对话框中还要注意,可以选择不同的 Framework 版本。如果已有的项目不 希望迁移到.NET Framework 的新版本,那么仍可以使用新功能,如改进的 IntelliSense 功能。但需要 安装 Visual Studio 2010 和以前的 Framework 版本,才能为早前的 Framework 版本构建项目。 Framework 版本选择也包含在搜索条件中,把可用的项目模板列表限制为与所选的.NET Framework 版本兼容的项目模板。 在 Visual Studio 中,一个最难理解的功能是 Web Site 项目的概念。这有别于 Web Application 项 目,Web Application 项目可以通过之前提到的 Add New Project 对话框添加。要添加 Web Site 项目需 要从 Solution 节点的上下文菜单中选择 Add | Web Site 命令,这将显示一个类似于图 2-5 所示的对话 框,在这里可以选择要创建的 Web 项目的类型。大多数情况下,这仅确定在项目中要创建的默认 项的类型。 图 2-5 在 Visual Studio 2010 中打开已有的解决方案或项目时,它们仍需要由升级向导升级 (更多信息请参见第 44 章),但本质上仅对解决方案和项目文件进行很小的修改。但是, 这些小修改涉及包含的其他属性,如果使用 MSBuild 的以前版本,就会中断已有的 构建过程。因此,仍需要整个开发团队转而使用 Visual Studio 2010 和 MSBuild 的新 版本。 一定要注意,图 2-5 列出的 Web 项目类型与 Add New Project 对话框的 Web 节点 下的类型相同。但是,它们不会生成相同的结果,因为 Web Site 项目(通过 Add New Web Site对话框创建)和Web Application项目(通过 Add New Project对话框创建)有重要的区 别,这两个项目类型的区别详见第 20 章。 第Ⅰ部分 集成开发环境 18 有了一两个项目后,就需要开始添加项了。这是通过 Solution Explorer 中项目节点下面的 Add 上下文菜单项完成的。第一个 New Item...子菜单项会打开 Add New Item 对话框,如图 2-6 所示。 图 2-6 与 New Project 对话框和 New Web Site 对话框一样,Add New Item 对话框的外观也有了变化。 除了列出与所选项目相关的项模板外,这个对话框还可以搜索已安装的模板,在线查找第三方生成 的模板。 返回 Add 上下文菜单,注意其中有许多预定义的快捷键,如 User Control 和 Class。这些快捷键 只是绕过了在 Add New Item 对话框中定位对应模板的阶段。Add New Item 对话框仍会显示,因为 需要给要创建的项指定名称。 2. 添加引用 每个即将发布的新软件开发技术都承诺有较好的重用性,但很少能兑现这个承诺。Visual Studio 2010 支持可重用组件的一种方式是通过对项目的引用来实现。如果展开任一个项目,就会发现其中 有许多.NET Framework 库,如 System 和 System.Core,项目必须引用它们才能构建。实际上,引 用允许编译器解析类型、属性、字段和方法名,并返回给定义它们的程序集。如果要重用某个第三 方库中的类,甚至重用自己的.NET 程序集中的类,就需要通过 Solution Explorer 中项目节点的 Add Reference . . .上下文菜单项,添加对该程序集的引用。 一定要分清是给项目添加项,而不是文件。许多模板都只包含一个文件,但一些 模板会在项目中添加多个文件,像 Window 或 User Control。 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 19 打开 Add Reference 对话框,如图 2-7 所示,Visual Studio 2010 就会查询本地计算机、全局程序 集缓存(Global Assembly Cache,GAC)和解决方案,以显示可以引用的已知库的列表,这包括放在不 同列表中的.NET 和 COM 引用,以及最近使用的项目和引用。在 Visual Studio 的以前版本中,这个 对话框加载起来很慢。如果需要引用的组件没有显示在对应的列表中,就可以选择 Browse 选项卡, 直接在文件系统中定位包含该组件的文件。现在,这个对话框会先加载解决方案中的项目列表,并 显示为默认选项卡,然后利用延迟加载功能加载其余选项卡的内容,所以该对话框几乎会立即显示 出来。 图 2-7 在其他基于项目的开发环境中,如 Visual Basic 的第一版,可以把对项目的引用添加到解决方案 中,而不是添加已编译的二进制组件。这个模型的优点是很容易调试所引用的组件,帮助确保运行 所有组件的最新版本,但对于大型解决方案而言,这又不太实用。 3. 添加服务引用 Solution Explorer 提供的另一类引用是服务引用。在 Visual Studio 的以前版本中,这只局限于 Web 引用,但随着 Windows Communication Foundation(WCF)的推出,现在有更一般的 Add Service Reference 菜单项。这会打开 Add Service Reference 对话框,如图 2-8 所示。在这个例子中,Discover 按钮的下拉列表用于在 Solution 中查找 Services。 如果解决方案包含大量的项目(“大型”解决方案是相对计算机而言的,但项目的数 量一般超过 20),就应考虑构建多个引用项目子集的解决方案。这会给整个应用程序 提供很好的调试功能,并在加载和构建解决方案时改进 Visual Studio 性能。另外还可 以创建不同的构建配置(参见第 5 章)来构建项目子集。 第Ⅰ部分 集成开发环境 20 图 2-8 可是,这个对话框是 Microsoft 未正确理解使用模式的另一种情况。该对话框可以重置大小,但 状态回应消息区域不能重置大小,很难读取生成的错误。但是,如果 Visual Studio 2010 在试图访问 服务信息时出错,该对话框会提供一个超链接,以打开 Add Service Reference Error 对话框。它一般 会给出解决问题的足够信息。 在图 2-8 的左下角有一个 Advanced 按钮。单击该按钮会打开 Service Reference Settings 对话框, 该对话框可以定制把哪些类型定义为服务引用的一部分。默认情况下,假定所有的本地系统类型都 匹配服务发布的类型。如果不是这样,就应当在这个对话框的 Data Type 区域中调整该值。在 Service Reference Settings 对话框的左下角还有一个 Add Web Reference 按钮,它可以添加更传统的.NET Web 服务引用。如果有一些限制或试图支持系统之间的操作,这个按钮就很重要。在应用程序中添加服 务的内容详见第 31 章。 2.2 Toolbox 窗口 与 Microsoft 公司为开发人员提供的许多其他 IDE 相比,Visual Studio 2010 IDE 的一个主要优势 是可以在Web 和富客户应用程序的设计过程中拖放元素。这些元素都在 Toolbox (Ctrl+Alt+X 组合键) 工具窗口中,该窗口可通过 View 菜单来访问,如图 2-9 所示。 图 2-9 Toolbox 窗口包含了所有可用于当前主工作区中显示的活动文档的组件。这些组件有些是可视 化的,如按钮和文本框,另外一些则是非可视化的、面向服务的对象,如计时器和系统日志文件; 甚至包括设计器元素,如在 Class Designer 视图中使用的类和接口对象。 (a) (b) 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 21 Visual Studio 2010 把各种组件显示在不同的组中,而不是显示一堆混乱的组件。这个默认的分 组功能更便于定位需要的控件,例如,与数据相关的组件在它们自己的 Data 组中。 默认情况下,组显示在列表视图中,如图 2-9(a)所示。每个组件都用自己的图标和名称来表示。 这不同于显示可用对象的旧方式,在这种旧方式中,Toolbox 只是图标的一个堆叠列表,用户需要 猜测某些意义不是特别明确的组件的用途,如图 2-9(b)的 Common Controls 组所示。用户可以单独 改变每个控件组的视图—— 只需要右击组区域中的任意位置,在上下文菜单中取消对 List View 选项 的选择。 无论组件如何显示,在程序中使用它们的方式都是一样的:单击并拖放需要的组件到活动文档 的设计界面上,或者双击组件对应的条目,这样 Visual Studio 会自动添加一个实例。可视化组件(如 按钮和文本框)显示在设计区域中,它们可以在该区域中重新定位、重置大小,或者通过属性网格来 调整。非可视化的组件,如计时器控件,在设计区域下面的非可视化区域中显示为图标,带有相关 的选项卡,如图 2-10 所示。 图 2-10 在图 2-9(a)的上部是 Reference Library Controls 组,它只有一个 MyControl 组件。Reference _Library 实际上是在同一个解决方案中定义的类库名,且它包含 MyControl 控件。当开始构建自己 的组件或控件时,不需要手动创建新的选项卡,完成添加每一项的过程,Visual Studio 2010 会自动 查询解决方案中的所有项目。如果标识了组件或控件(其实是实现了 System.ComponentModel. Icomponent 的类或用于 WPF 的 System.Windows.FrameworkElement 的类,Visual Studio 2010 会为该 项目创建一个新选项卡,并添加相应的项、默认的图标和类名(这里是 MyControl),如图 2-9(a)所示。 使用组件时,该图标会出现在设计区域的非可视化部分。 Toolbox 的一个有趣功能是选择一个代码区域,把它拖放到 Toolbox 上,就可以把 代码片段复制到 Toolbox 中。可以给代码片段重命名或重新排序,使之可用于显示, 或者存储常用的代码块。 Visual Studio 2010 会在开始和构建活动之后查询解决方案中的所有项目。如果有 大量的项目,就需要大量的时间。此时,应考虑在 Options 对话框(Tools | Options)的 Windows Forms Designer 节点下,把 AutoToolboxPopulate 属性设置为 false,禁用这个 功能。 第Ⅰ部分 集成开发环境 22 要定制项在 Toolbox 中的显示方式,需要像组件或控件那样给项目添加一个 16 像素×16 像素 的位图。接着,在 Solution Explorer 中选择新插入的位图,并导航到 Properties 窗口。确保 Build 属 性设置为 Embedded Resource。现在就只需给控件添加 ToolboxBitmap 特性。 VB Public Class MyControl C# [ToolboxBitmap(typeof(MyControl), "MyControlIcon.bmp")] public class MyControl 这个特性使用对 MyControl 的类型引用来定位对应的程序集,以提取嵌入资源MyControlIcon.bmp。 它还有另一个重载方式,即把文件路径用作唯一的参数。此时,不需要在项目中添加位图。 注意,定制 WPF 控件的 Toolbox 和设计器操作方式时,要使用元数据存储,而不是属性。这一 般会生成额外的程序集,用于调整 Visual Studio 2010 和 Expression Blend 中的设计方式。 2.2.1 排列组件 按字母排序可以定位 Toolbox 中不熟悉的元素,这是一种非常好的默认方式。但如果只使用一 小部分组件,不断地上下滚动列表就会很麻烦。要解决这个问题,可以自己创建控件组并移动现有 的对象类型。 重新放置一个组件非常容易。在 Toolbox 中找到要移动的组件,选中并把它拖动到新的位置。 如果对新位置感到满意,就放开鼠标按钮,这样就可以把组件移动到列表中新的位置。也可以采取 相同的方式把它移动到另一个组中—— 只要将组件在 Toolbox 列表中上下拖动,在合适的组中放开 鼠标按钮即可。这些操作可以应用在 List 视图和 Icon 视图中。 如果希望把一个组中的组件复制到另一个组中而并非移动它,在拖动时只要按下 Ctrl 键就可以 了。该过程将复制组件,使它同时出现在两个组中。 有时用户希望在自己创建的组中存放最常用的控件和组件。要在 Toolbox 中创建一个新组,可 以右击 Toolbox 区域中的任意位置,然后选择 Add Tab 命令。Visual Studio 2010 会在 Toolbox 底部添 加一个新的空白选项卡,并提示输入选项卡名称。命名完成以后,可以使用本节下面描述的步骤为 其添加组件。 在第一次启动 Visual Studio 2010 时,每个组中的项都是按照字母顺序排列的。但是,在多次移 动项之后,组件可能会处于混乱状态,此时可以对它们重新排序。方法是右击组中的任意位置,然 后选择 Sort Items Alphabetically 命令。 默认情况下,在 Toolbox 中添加控件时使用的是它们的基本名称。这就意味着某些名称可能很 不能定制自动生成的项在 Toolbox 中的显示方式,但如果在 Toolbox 中手动添加 项,再选择该项,就会看到定制的图标。另外,如果把一个组件拖放到窗体上,图标 就会显示在设计器的非可视化部分。 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 23 难理解,特别是在 Toolbox 中添加 COM 控件时。Visual Studio 2010 允许修改组件的名称,使其更易 于理解。 要更改组件的名称,右击 Toolbox 中的组件条目,并选择 Rename Item 命令。此时,原标题处 将显示一个可编辑字段,允许用户按照自己的喜好进行命名(可以使用特殊字符)。 更加混乱的情况是组件没有包含在正常的组中,且无法找到需要的控件。此时,可以在右击上 下文菜单中选择 Reset Toolbox。该操作会把 Toolbox 中的所有组恢复到原来的状态—— 每一个组件 都位于初始组中,并按照字母顺序排列。 2.2.2 添加组件 有时,需要使用的组件并没有显示在Toolbox 列表中。大多数.NET 主要组件都位于 Toolbox 中,但 仍有一部分没有。例如,WebClient 类组件就没有默认显示在 Toolbox 中。托管的应用程序也可能在 其设计中使用 COM 组件。一旦在 Toolbox 中添加,COM 对象的使用方式就与常规的.NET 组件基 本一样。如果编码正确,就可以使用完全相同的方式对它们进行操作—— 使用 Properties 窗口以及在 代码中引用它们的方法、属性和事件。 要在 Toolbox 布局中添加一个组件,右击希望添加组件的组中的任意位置,然后选择 Choose Items 命令。过一会儿 (在比较慢的机器上可能需要几秒钟的时间,因为它需要查询.NET 缓存来确 定所有可以选择的组件),就会弹出如图 2-11 所示的.NET Framework 组件列表。 图 2-11 滚动列表定位希望在 Toolbox 中添加的项,然后选择相应的复选框。在单击 OK 按钮应用更改 之前,可以选中并添加多个项。同时,也可以在列表中取消选项来删除项。注意,这将从原来包含 该元素的每个组中删除该项,而不仅仅是当前编辑的组。 如果发现项的定位非常困难,可以使用 Filter 框,它可以根据名称、名称空间和程序集名称过 滤列表。某些情况下希望使用的项根本就没有出现在列表中,如那些自己构建且没有注册到全局程 注意,执行 Reset Toolbox 操作会删除所有自定义的命令组,所以使用该功能时请 谨慎! 第Ⅰ部分 集成开发环境 24 序集缓存中的非标准组件。要添加这种组件,可以使用 Browse 按钮在计算机上定位物理文件。在 选中和取消选中需要的项以后,单击 OK 按钮把它们保存到 Toolbox 布局上。 COM 组件、WPF 组件、Silverlight 组件和(Workflow)Activities 的添加方式与此相同。只要简单 地在对话框窗口中切换到对应的选项卡上,就能看到已经成功注册并可以添加使用的 COM 组件。 同样,可以使用 Browse 按钮来定位那些没有出现在列表中的控件。 2.3 Properties 窗口 在 Visual Studio 2010 中,一个最常用的工具窗口是 Properties(F4)窗口,如图 2-12 所示。Properties 窗口由一个属性网格组成并与上下文相关,仅显示与当前选中项相关的属性,该项可以是 Solution Explorer 中的一个节点,或者窗体设计区域中的一个元素。每一行都表示一个属性,且在两列中显 示了属性名和对应的值。图 2-12(c)显示了 WPF 应用程序的更新的属性网格,其中包括一个预览图 标和搜索功能。 (a) (b) (c) 图 2-12 Properties 窗口可以给属性分组或按字母排序—— 使用 Properties 窗口的前两个按钮可以切换这 个布局。还有一组内置的编辑器,用于各种系统类型,如颜色、字体、锚定和停靠,在单击要修改 的属性值时,就会调用这些编辑器。选择一个属性后,如图 2-12(b)所示,该属性名会突出显示,并 在属性网格的下面区域显示一个描述。 在 Properties 窗口中,只读属性用灰色表示,其值不能修改。图 2-12(b)中的 Text 属性值 SayHello! 显示为黑体,表示它不是这个属性的默认值。同样,图 2-12(c)的 Content 属性在属性名和属性值之 间有一个实心黑方块,表示指定了该属性值。如果查看设计器生成的如下代码,应注意到属性网格 中每个显示为黑体的属性都有一行代码—— 给控件中的每个属性添加一行代码会显著增加显示窗体 的时间。 VB Me.btnSayHello.Location = New System.Drawing.Point(12, 12) Me.btnSayHello.Name = "btnSayHello" Me.btnSayHello.Size = New System.Drawing.Size(100, 23) Me.btnSayHello.TabIndex = 0 Me.btnSayHello.Text = "Say Hello!" 可从 wrox.com 下载源代码 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 25 Me.btnSayHello.UseVisualStyleBackColor = True Form1.Designer.vb C# this.btnSayHello.Location = new System.Drawing.Point(12, 12); this.btnSayHello.Name = "btnSayHello"; this.btnSayHello.Size = new System.Drawing.Size(100, 23); this.btnSayHello.TabIndex = 0; this.btnSayHello.Text = "Say Hello!"; this.btnSayHello.UseVisualStyleBackColor = true; Form1.Designer.cs 除了显示所选项的属性外,Properties 窗口还为关联事件处理程序提供了一种设计方式。图 2-13(a) 显示了通过 Properties 窗口顶部的第 4 个按钮(闪电图标)打开的事件视图。这里包含了单击事件的处 理程序。要关联另一个事件,可以在值列的下拉列表中从已有的方法列表中选择,也可以双击值列, 这会创建一个新的事件处理方法,并把它关联到事件上。如果使用第一种方法,就只列出匹配事件 签名的方法。 (a) (b) 图 2-13 某些组件,如 DataGridView,有许多命令或快捷键可以通过 Properties 窗口来执行。在图 2-13(b) 中的 DataGridView 有两个命令:Edit Columns 和 Add Column。单击这两个命令链接,就会显示一 个执行该操作的对话框。 如果 Properties 窗口仅占用屏幕的一小部分空间,就很难滚动属性列表。如果右击属性网格, 可从 wrox.com 下载源代码 对于 Web 和 WPF 应用程序,Properties 窗口中的属性集分别保存为 aspx 或 xaml 文件中的标记。与 Windows 窗体设计器一样,只有在 Properties 窗口中设置的值才保 存到标记中。 第Ⅰ部分 集成开发环境 26 就可以取消对 Commands 和 Description 复选框的选择,以隐藏 Properties 窗口的这些部分。 扩展 Properties 窗口 Visual Studio 2010 使属性值显示为黑体来突出已改变的属性。问题是 Visual Studio 2010 如何知 道默认值是什么?答案是 Properties 窗口查询一个对象以确定在属性网格中显示什么属性时,要查 找许多设计特性。这些特性可以控制要显示的属性、编辑其值的编辑器以及属性的默认值。为了说 明如何在自己的组件中使用这些特性,先给组件添加一个简单的自动属性。 VB Public Property Description As String MyControl.vb C# public string Description { get; set; } MyControl.cs 1. Browsable 特性 所有的公共属性都默认显示在属性网格中。但通过添加 Browsable 特性,可以明确控制这个行 为。如果把该特性设置为 false,就不会在属性网格中显示属性。 VB Public Property Description As String MyControl.vb C# [System.ComponentModel.Browsable(false)] public string Description { get; set; } MyControl.cs 2. DisplayName 特性 DisplayName 特性很容易理解,它允许修改属性的显示名称。在下面的例子中,可以修改 Description 属性的名称,使该属性在属性网格中显示为 VS2010 Description。 VB Public Property Description As String MyControl.vb 可从 wrox.com 下载源代码 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 27 C# [System.ComponentModel.DisplayName("VS2010 Description")] public string Description { get; set; } MyControl.cs 3. Description 特性 除了定义属性的友好名称或显示名称外,还应提供一个描述。在选择属性时,该描述显示在 Properties 窗口的底部区域,确保组件的用户了解属性的用途。 VB Public Property Description As String MyControl.vb C# [System.ComponentModel.Description("My first custom property")] public string Description { get; set; } MyControl.cs 4. Category 特性 Properties 窗口处于分组视图下时,用户提供的所有属性都默认放在 Misc 组中。使用 Category 特性可以把这些属性放在任何一个已有的组中,例如 Appearance 或 Data,如果指定了一个不存在的 组名,还会把属性放在一个新组中。 VB Public Property Description As String MyControl.vb C# [System.ComponentModel.Category("Appearance")] public string Description { get; set; } MyControl.cs 5. DefaultValue 特性 前面提到,Visual Studio 2010 突出显示修改了初始值或默认值的属性。实际上,Visual Studio 2010 会查找 DefaultValue 特性来确定属性的默认值。 VB Private Const cDefaultDescription As String = "" Public Property Description As String = cDefaultDescription MyControl.vb 可从 wrox.com 下载源代码 第Ⅰ部分 集成开发环境 28 C# private const string cDefaultDescription = ""; private string mDescription = cDefaultDescription; [System.ComponentModel.DefaultValue(cDefaultDescription)] public string Description { get { return mDescription; } set { mDescription = value; } } MyControl.cs 在这个例子中,如果 Description 属性的值设置为< enter description >,Visual Studio 2010 就删除 设置该属性的代码行。如果修改了一个属性并希望返回其默认值,就可以在 Properties 窗口中右击 该属性,并从上下文菜单中选择 Reset 命令。 6. AmbientValue 特性 我们认为自己已经理解了但实际上并未真正理解的一个功能是周围属性的概念。典型的例子是 背景色、前景色和字体:除非通过 Properties 窗口明确设置这些属性不是继承自它们的基类,而是 继承自它们的父控件。周围属性的较宽泛的定义是从另一个数据源中获得其值的属性。 与 DefaultValue 特性一样,AmbientValue 特性用于告诉 Visual Studio 2010 何时应不给设计器文 件添加代码。但是使用周围属性,就不能硬编码设计器的值来比较当前值,因为它要视属性的源值 来定。因此,在定义 AmbientValue 特性时,这会告诉设计器查找函数 ShouldSerializePropertyName。 在下面的例子中,这个函数是 ShouldSerializeDescription,调用它可以确定属性的当前值是否应保存 到设计器代码文件中。 VB Private mDescription As String = cDefaultDescription Public Property Description As String Get If Me.mDescription = cDefaultDescription AndAlso Me.Parent IsNot Nothing Then Return Parent.Text End If Return mDescription End Get 可从 wrox.com 下载源代码 注意,DefaultValue 特性不会设置属性的初始值。如果指定了 DefaultValue 特性, 建议也把属性的初始值设置为相同的值,如上面的代码所示。 第 2 章 Solution Explorer、Toolbox 和 Properties 窗口 29 Set(ByVal value As String) mDescription = value End Set End Property Private Function ShouldSerializeDescription() As Boolean If Me.Parent IsNot Nothing Then Return Not Me.Description = Me.Parent.Text Else Return Not Me.Description = cDefaultDescription End If End function MyControl.vb C# private string mDescription = cDefaultDescription; [System.ComponentModel.AmbientValue(cDefaultDescription)] public string Description{ get{ if (this.mDescription == cDefaultDescription && this.Parent != null){ return Parent.Text; } return mDescription; } set{ mDescription = value; } } private bool ShouldSerializeDescription(){ if (this.Parent != null){ return this.Description != this.Parent.Text; } else{ return this.Description != cDefaultDescription; } } MyControl.cs 在创建带这个属性的控件时,其初始值设置为 DefaultDescription 常量的值,但在设计器中,有 一个值对应于 Parent.Text 值。在设计器代码文件中,没有代码明确设置这个属性,因为在 Properties 窗口中,该值没有显示为黑体。如果把这个属性的值改为不是 DefaultDescription 常量,该值就会显 示为黑体,并在设计器代码文件中添加一行代码。如果重置这个属性,底层的值就设置回 AmbientValue 定义的值,但我们只会看到它恢复为显示 Parent.Text 值。 2.4 小结 本章介绍了 3 个最常用的工具窗口,知道如何使用这些窗口可以在开发过程中节省大量的时间。 可从 wrox.com 下载源代码 第Ⅰ部分 集成开发环境 30 但是,只有开始把设计器的使用经验融入自己的组件中,Visual Studio 2010 的强大之处才会真正体 现出来。即使自己的组件不在公司之外使用,这也是有用的。高效地使用设计器不仅可以改进控件 的使用效率,还可以改进构建的应用程序的性能。 选项和定制 本章内容 ● 定制 Visual Studio 2010Start Page ● 调整选项 ● 控制窗口布局 熟悉了 Visual Studio 2010 的基本布局后,就该学习如何定制 IDE 以适应自己的工作风格了。本 章介绍如何操作工具窗口、优化代码窗口、使视图空间最大化、修改字体和颜色以减少开发人员的 疲乏感。 随着 Visual Studio 的逐渐成熟,有太多的设置可以调整来优化我们的开发环境。但除非定期花 些时间查看 Options 对话框(Tools | Options),否则就可能忽略一两个重要的设置。本章将介绍许多设 置的推荐值,用户可能要进一步研究这些设置。 许多 Visual Studio 插件会在 Options 对话框中添加它们的节点,因为这会提供在 Visual Studio 中 配置设置的一站式服务。还要注意一些开发设置配置文件,如第 1 章所述,仅显示了选项的一个删 节列表。此时,选择 Advanced 复选框就会显示可用选项的完整列表。 3.1 Start Page 默认情况下,打开 Visual Studio 2010 的一个新实例时,会看到所谓的 Start Page(起始页面)。在 Options 对话框的 Environment | Startup 节点上可以调整这个行为。其他选项有显示 Home Page(主页 面,可以通过 Environment | Web Browser 节点设置)、上次加载的解决方案、已打开的或新的项目对 话框,或者什么也不做。 大多数开发人员都使用 Start Page 的原因是它提供了一个有效的起点,可以跳到许多其他动作 上。在图 3-1(a)中,有一些链接可以连接 Team Foundation Server、创建或打开项目。还有一个最近 项目的列表,可以快速打开最近使用的项目。把鼠标指针停放在项目的左边,会显示一个水平图钉, 3 第 章 第Ⅰ部分 集成开发环境 32 单击该图钉,把它从水平改为垂直,就表示项目已固定在 Recent Projects 列表中。另外,还可以右 击项目,打开包含它的文件夹(如果希望定位磁盘上的项目,而不是打开它,这就是有用的),或者 从列表中删除项目。在左下角有两个复选框,分别控制着打开项目后是否关闭 Start Page,以及在启 动时是否显示 Start Page。如果因某种原因关闭了 Start Page,希望再次打开它,就可以选择 View | Start Page 菜单项。 (a) (b) (c) 图 3-1 Start Page 的右边是一系列标签页。Get Started 标签页(如图 3-1(a)所示)包含各种主题的许多子部 分,包括 Windows、Web、Office 和 Cloud。单击任意一个子部分,就会显示如何开始使用这些技术 的信息,以及 Visual Studio 2010 中的新功能介绍。 在 Guidance and Resources 标签页(如图 3-1(b)所示)上是与最佳实践方式、执行步骤相关的主题 链接,以及用 Visual Studio 2010 设计、构建、测试和部署软件的其他参考资料链接。 最后,Latest News 标签页(如图 3-1(c)所示)可以让用户了解 Visual Studio 2010 和.NET Framework 的最新进展。可以使用默认的 RSS 源,或者指定要在 Start Page 上显示的自己的源。 3.1.1 定制 Start Page 在 Visual Studio 2010 中,Start Page 实际上是驻留在 IDE 外壳中的一个 WPF 控件。可以调整 Start Page,提供与自己相关的信息或动作。Visual Studio 不是修改默认的 Start Page,而是支持用户特定 的 Start Page 或 Custom Start Page。默认情况下,这个功能是禁用的,所以在开始定制 Start Page 前, 必须在 Options 对话框的 Environment | Startup 标签页上,选中 Allow Custom Start Page 复选框。 Start Page 只是一个 WPF 控件,所以可以创建一个新的 WPF 控件项目,从头开始建立页面。但 在大多数情况下,从默认的 Start Page 开始,调整它以满足自己的需求要简单得多。为此,需要把 默认的 Start Page 从安装它的位置复制到 Documents 文件夹。 (1) 把 C:\Program Files\Microsoft Visual Studio 10.0\ Common7\IDE\StartPages\目录的内 容复制到C:\Users\\ Documents\Visual Studio 10\StartPages 目录下(可能需要创建这个文件 夹,因为它在默认情况下不存在)。 (2) 双击项目文件 StartPage.csproj,在 Visual Studio 2010 中打开该项目,如图 3-2 所示。 如图3-2所示,可以使用WPF设计器修改Start Page,也可以在XAML页面中直接修改它。XAML 页面分为许多部分,开始修改的最佳位置是为已有标签页定义的 TabItem 标记。要创建另一个标签 页,可以复制已有的一个标记,把它改为包含自己的内容。例如,在 Latest News 标签页的后面添加 下面的标记,就会添加与自己公司相关的信息。 第 3 章 选项和定制 33 图 3-2 XAML The Company has put a lot of effort into writing this custom Start Page so that you can quickly access information relevant to your job, the projects you are working on etc. 保存这个修改后,只要单击 Visual Studio 中的 Start Page 标签页,就会应用这些修改,显示一个 新的 Company 标签页,如图 3-3 所示。 第Ⅰ部分 集成开发环境 34 图 3-3 当然,如果希望删除 Start Page 的默认布局,就可以删除已有的元素,代之以自己的布局、信 息和功能。为此,应在设计器或 XAML 页面上选择元素,并删除它们。再使用 Toolbox 中的 WPF 控件建立自己的 Start Page 界面。 3.1.2 带用户控件的代码隐藏 为了进一步扩展 Start Page 的功能,需要对特定的事件执行代码。Start Page 本身不支持用于编 写事件处理程序的代码隐藏文件,但可以把功能封装在用户控件中,再在 Start Page 上使用该用户 控件。 打开上一节创建的 Start Page 项目,添加一个新项目,在其中放置要创建的控件。为此,选择 File | Add | New Project 命令,从 VB 或 C#节点下的 Windows 节点中选择 WPF User Control Library。 给项目指定名称,如 CompanyStartPageControls,单击 OK 按钮。接着执行下面的步骤,创建一个启 动公司网站的按钮: (1) 在 Solution Explorer 中,把 UserControl1.xaml 重命名为 CompanyPortalControl.xaml。 (2) 在 Solution Explorer 中双击 CompanyPortalControl.xaml 文件,在设计器中打开它。 (3) 用下面的标记替换 XAML,创建一个带 Click 事件处理程序的按钮: XAML (4) 在 Solution Explorer 中右击 CompanyPortalControl.xaml 文件,选择 View Code 命令。 (5) 替换为如下代码,执行按钮的 Click 事件处理程序,加载公司网站。 第 3 章 选项和定制 35 VB Class CompanyPortalControl Private Sub LaunchWebsite(ByVal sender As Object, ByVal e As RoutedEventArgs) System.Diagnostics.Process.Start("http://www.builttoroam.com") End Sub End Class C# namespace CompanyStartPageControls{ public partial class CompanyPortalControl : UserControl{ public CompanyPortalControl(){ InitializeComponent(); } private void LaunchWebsite(object sender, RoutedEventArgs e){ System.Diagnostics.Process.Start( @"http://www.builttoroam.com"); } } } 前面创建了一个带有基本功能的控件。按照下面的步骤在 Start Page 中使用这个控件: (1) 右击 Solution Explorer 中的 StartPage 项目,选择 Add Reference,在 Projects 标签页上选择 CompanyStartPageControls 项目,单击 OK 按钮。 (2) 选择 Build | Rebuild Solution 菜单项,重新构建解决方案。 (3) 在 Solution Explorer 中双击 StartPage.xaml 文件,打开设计器。 (4) 在 Toolbox 中会看到 CompanyStartPageControls 标签页,该标签页中包含 CompanyPortal Control。把该项拖放到 StartPage 上公司信息的下面。Company TabItem XAML 现在应该如下所示: XAML The Company has put a lot of effort into writing this custom Start Page so that you can quickly access information relevant to your job, the projects you are working on etc. 第Ⅰ部分 集成开发环境 36 如果现在保存所有文件(Ctrl+Shift+S 组合键),再在 Visual Studio 2010 中选择 Start Page 标签页, 就会看到一个错误,指出未找到包含 CompanyPortalControl 的程序集。要修正这个错误,需要把 CompanyStartPageControls.dll文件复制到c:\Program Files\ Microsoft Visual Studio 10.0\Common7\IDE\ StartPageAssemblies 目录。这个目录默认不存在,所以在复制程序集之前需要创建它。 一旦复制了 CompanyStartPageControls.dll 文件,就需要重启动 Visual Studio。Start Page 应如 图 3-4 所示。 图 3-4 如果单击 Company Website 按钮,就会直接在 Start Page 上把公司门户加载到外部 Web 浏览器上。 3.2 窗口布局 如果不熟悉 Visual Studio,就会觉得大量工具窗口的操作难以捉摸,因为它们似乎位于随机的 位置上,在编写代码(设计时)和运行代码(运行时)之间来回切换时,这些工具窗口也在移动。实际上, Visual Studio 2010 会记住这些工具窗口在每个模式下的位置。这样,就可以优化编写和调试代码的 方式了。 在 Solution Explorer 中打开不同的项时,屏幕顶部的工具栏数量会随着所打开的文件类型而变 化。每个工具栏都有一个内置的关联来指定文件扩展名,这样 Visual Studio 就知道在打开指定扩展 名的文件时显示哪些工具栏。如果在打开扩展名匹配的文件时关闭了工具栏,那么当以后再打开该 扩展名的文件时,Visual Studio 会记住这个操作。 3.2.1 查看窗口和工具栏 关闭工具窗口或工具栏后,就很难再次定位它。但是,大多数最常用的工具窗口都可以通过 View 菜单来访问。其他工具窗口(主要与调试相关)都位于 Debug 菜单下。 Visual Studio 2010 中的所有工具栏都列在 View | Toolbars 菜单项下。每个当前可见的工具栏都 在 Customize 对话框(Tools | Customize)中选择相应的工具栏,单击 Reset 按钮,可 以重置工具栏和文件扩展名之间的关联。 第 3 章 选项和定制 37 在对应的菜单项旁边用一个勾号来标记。还可以在 Visual Studio 窗口顶部右击工具栏区域的任意空 白位置来访问工具栏列表。 工具栏可见后,就可以通过 View | Toolbars | Customize 或在 Tools 菜单下定制显示哪些按钮。另 外,如图 3-5 所示,如果选择工具栏末端的下向箭头,就会显示该工具栏的所有按钮,从中可以选 择要显示在工具栏上的按钮。 图 3-5 3.2.2 浏览打开的项 打开多个项后,可能会用尽编辑区域顶部的所有空间,也不能看到已打开的所有项的选项卡。 当然,可以返回 Solution Explorer 窗口,选择某个项。如果该项已打开,它就会显示出来,而无需 恢复到其保存时的状态。但是,还必须在 Solution Explorer 中查找该项,所以不是很方便。 Visual Studio 2010 为打开项的列表提供了许多快捷方式。与大多数基于文档的应用程序一样, Visual Studio 也有一个 Windows 菜单。打开一个项时,就会在这个菜单的底部区域上添加它的标题。 要显示一个打开的项,只需从 Windows 菜单中选择它,或者单击一般的 Windows 项,就会显示一 个模式对话框,从中可以选择需要的项。 另一个方法是使用编辑区域的选项卡区域末端的下拉菜单。图 3-6 显示了已打开元素的下拉列 表,从中可以选择要访问的元素。 图 3-6 除了下拉图标之外,图 3-6 的右边与左边相同。这个菜单还显示了一个下向箭头,但这个箭头 的顶部有一条横线,它表示在编辑区域的顶部还有更多没有显示出来的选项卡。 浏览已打开的项还有另一种方式:按下 Ctrl+Tab 组合键,这会显示一个临时窗口,如图 3-7 所 示。释放 Ctrl 键时,该窗口就会消失。但是,在该窗口打开时,可以使用箭头键或按下 Tab 键在打 开的窗口之间移动。 第Ⅰ部分 集成开发环境 38 图 3-7 Ctrl+Tab 窗口分为 3 个部分:活动的工具窗口、活动的文件(实际上这应是活动的项,因为它包 含一些不对应单一文件的项)和当前选中项的预览。随着活动文件或活动工具窗口的数量的增加,窗 口会垂直扩展,直到有 15 个项为止,此时会出现一个额外的列。 如果右击某个已打开的项的选项卡,就会显示一个隐藏的上下文菜单,通过它可以快速执行常 见的任务,如保存或关闭与该选项卡关联的文件。两个特别有用的动作是 Close All But This 和 Open Containing Folder。这两个动作很容易理解,前者关闭除当前单击的选项卡之外的所有其他选项卡, 后者在 Windows Explorer 中打开包含文件的文件夹。所有的窗口都可以停靠,所以也可以执行 Float 或 Dock as Tabbed Document 动作,这两个动作根据选项卡的状态来启用。 3.2.3 停靠 每个工具窗口都有一个默认位置,从 View 菜单中打开时,它就会恢复到这个默认位置上。例 如,选择 View | Toolbox 会使 Toolbox 停靠在 Visual Studio 的左边界上。一旦打开了工具窗口,并使 之停靠在一条边上,它就有两个状态:固定和取消固定。如第 1 章所述,在这两个状态之间切换时, 可以单击垂直的图钉图标,使工具窗口处于浮动状态,还可以单击水平的图钉图标来固定工具窗口。 使工具窗口处于浮动状态时,它可以滑动回 IDE 的边界,并在工具窗口的标题上显示一个标记。 在使工具窗口处于浮动状态时,这个动画可能会令人反感,也很浪费时间。在 Options 对话框的 Environment 节点上,可以控制 Visual Studio 是否应根据客户机的性能自动调整可视化操作。另外, 还可以取消对 Enable rich client visual experience 选项的选择。 对于大多数人来说,默认位置就足够了,但偶尔需要调整工具窗口的出现位置。Visual Studio 2010 有一个最高级的系统来控制工具窗口的布局。第 1 章介绍了如何使用工具窗口顶部 Pin 和 Close 按钮旁边的下拉列表,使工具窗口处于浮动状态、可停靠状态,甚至占据主编辑区域的一部分(使用 Tabbed Document 选项)。 当工具窗口可以停靠时,可以对它的位置进行大量的控制。在图 3-8 中显示了 Properties 窗口的 顶部,它被拖离其默认位置—— IDE 的右边。开始拖动时,需要确保工具窗口是固定的,接着单击 如果有多个列的活动文件,就应关闭一些或全部未使用的文件。Visual Studio 2010 打开的文件越多,使用的内存就越多,执行也就越慢。 第 3 章 选项和定制 39 工具窗口顶部的标题区域或者工具窗口底部的选项卡,沿着希望窗口移动的方向拖动鼠标。如果单 击标题区域,那么位于 IDE 该部分的所有工具窗口都会移动。而单击选项卡仅移动相应的工具窗口。 图 3-8 在 Visual Studio 2010 上拖动工具窗口时,IDE 上会出现不同方向的半透明图标。这些图标是很 有用的向导,有助于确定工具窗口的确切位置。在图 3-9 中,Data Sources 工具窗口被固定在左边, Properties 窗口根据中心图像的左图标来定位,蓝色的阴影显示在现有工具窗口的内部。这表示 Properties 工具窗口固定在 Data Sources 工具窗口的右边,如果选择其布局,它就是可见的。如果选 择最左边的图标,Properties 工具窗口就固定在 IDE 的左边,但按次固定在 Data Sources 窗口的左边。 图 3-9 另外,如果 Properties 工具窗口在 Data Sources 工具窗口上拖动,如图 3-10 所示,中心图像就 会移动到现有工具窗口上,这表示 Properties 工具窗口会定位在现有工具窗口区域内部,在不同区 域拖动窗口时,蓝色的阴影再次表示释放鼠标时工具窗口的位置。在图 3-10 中,它表示 Properties 工具窗口显示在 Data Sources 工具窗口的下面。 第Ⅰ部分 集成开发环境 40 图 3-10 3.3 编辑区域 与大多数 IDE 一样,Visual Studio 2010 也构建在中心代码编辑窗口的基础上。该编辑窗口不断 地演化,现在已经不再是一个简单的文本编辑器。大多数开发人员都花大量的时间在编辑区域编写 代码,同时有越来越多的设计人员执行构建窗体、调整项目设置、编辑资源等任务。无论是编写代 码还是进行窗体设计,都要在 Visual Studio 2010 的编辑区域花大量的时间。所以一定要了解如何改 变布局,才能工作得更高效。 3.3.1 字体和颜色 在 Visual Studio 中,首先推荐修改编辑区域使用的字体和颜色,从而使代码更容易理解。但不 应仅调整这些设置。选择容易阅读且不伤眼睛的字体和颜色,可以提高工作效率,且长时间编码也 不觉得疲乏。图 3-11 显示了 Options 对话框的 Fonts and Colors 节点,在其中可以调整字体、字号、 颜色和不同显示项的风格。要注意,在 Options 对话框的这个节点中,它加载起来很慢,所以应避 免无意中单击它。 为了在 Visual Studio 2010 中调整某个特定文本项的外观,首先需要选择要应用这些外观的 IDE 区域。在图 3-11 中,选择 Text Editor 项,并确定应出现在 Display items 列表中的项。在该列表中找 到相关的项后,就可以调整字体和颜色了。 如果屏幕较大,或者有多个屏幕,就应花点时间布置常用的工具窗口。有多个屏 幕时,使用浮动的工具窗口表示可以使它们远离主编辑区域,最大化屏幕区域。如果 屏幕较小,就总是需要调整哪些工具窗口可见,所以熟悉停靠和布局选项是很重要的。 第 3 章 选项和定制 41 图 3-11 选择字体时应意识到,编写代码时,均衡字体通常没有非均衡(固定宽度)字体高效。如图 3-11 所示,下拉列表中固定宽度的字体与可变固定宽度的类型被区分显示,因此很容易识别。 3.3.2 可视化指南 编辑文件时,Visual Studio 2010 会根据文件的类型自动给代码添加颜色。例如,图 3-12 显示了 一个 VB 代码文件,用蓝色显示关键字,而变量名和类引用显示为黑色,字符串字面量显示为红色。 还要注意,在代码的左边有一条线,表示代码块。单击减号可以折叠 btnSayHello_Click 方法或整个 Form1 代码块。 可视化指南的各个要点如图 3-12 至图 3-14 所示。熟悉 VB.NET 的读者可以看出,图 3-12 没有 显示一行代码的末尾,在该行代码中,方法设置为处理 btnSayHello 按钮的 Click 事件。这是因为该 行的剩余部分被代码窗口的边界遮挡住了。要查看该行的末尾,开发人员必须向右滚动窗口,或使 用键盘把光标移动到该行的末尾。在图 3-13 中,通过 Options 对话框启用换行功能(参见 Text Editor | All Languages | General 节点)。 图 3-12 图 3-13 这个列表中的一些项(如 Plain Text)是由 Visual Studio 2010 中的多个区域重用,所 以在调整字体和颜色时,可能会出现某些意想不到的变化。 第Ⅰ部分 集成开发环境 42 图 3-14 但启用换行功能就很难看出哪些代码行是换过行的。Visual Studio 2010 为此提供了一个选项(在 Options 对话框的 enable word wrapping 复选框下面),它可以在每个换过行的代码行末尾显示可视化 图示符,如图 3-14 所示。在该图中,还可以看到另外两个可视化指南。在左边代码块标记的外部是 行号。它们可以通过 Word Wrap 和 Visual Glyphs 复选框下面的 Line numbers 复选框来启用。另一个 可视化指南是代码中表示空格的点。与其他可视化指南不同,该指南需要在代码编辑区域获得焦点 时,通过 Edit | Advanced | View White Space 菜单项启用。 3.3.3 全屏模式 如果许多工具窗口和多个工具栏可见,就会很快用尽实际上用于编写代码的空间。因此,Visual Studio 2010 提供了全屏模式,该模式可以通过 View | Full Screen 菜单项来访问。另外,按下 Shift+Alt+Enter 组合键也可以进入和退出全屏模式。图 3-15 显示了 Visual Studio 2010 全屏模式的顶 部。可以看出,该图没有显示任何工具栏和工具窗口,并且窗口完全最大化,甚至没有显示通常的 Minimize、Restore 和 Close 按钮。 图 3-15 3.3.4 跟踪变化 为了改进编辑过程,Visual Studio 2010 使用行级跟踪功能来指出在编辑会话中修改了哪些代码 行。当打开一个文件开始编辑时,并没有启用彩色编码功能。但在开始编辑时,修改了的代码行的 如果使用多个屏幕,全屏模式就非常有用。取消工具窗口的停靠选项,把它们放在 第二个监视器上。这样,当编辑窗口处于全屏模式下时,仍可以访问工具窗口,而无需 来回切换。如果取消工具窗口的停靠选项,它就不会出现全屏模式下。 第 3 章 选项和定制 43 旁边会显示一个黄色标记。在图 3-16 中可以看出,自从上一次保存这个文件后,MessageBox 代码 行已修改过了。 图 3-16 保存文件时,修改了的代码行会在旁边显示一个绿色的标记。在图 3-17 中,第一个 MessageBox 代码行自从打开文件后改变了,但这些改变已保存到磁盘上。而第二个 MessageBox 代码行还没有 保存。 图 3-17 3.4 其他选项 我们还没有接触过的许多选项可以用来改变 Visual Studio 的操作方式。本章的剩余部分介绍其 中的一些有用选项以提高效率。 3.4.1 快捷键 Visual Studio 2010 对同一个动作提供了多种不同的执行方式。菜单、工具栏以及各个工具窗口 都提供对很多命令的直接访问,由于可以进行的操作数量过于庞大,因此还有很多命令无法通过图 形界面来访问。但可以通过快捷键访问这些命令(以及大部分菜单和工具栏中的命令)。 有各种快捷方式—— 从保存所有变更的 Ctrl+Shift+S 快捷键到意义不那么明确的用于显示 Exceptions 对话窗口的 Ctrl+Alt+E 快捷键。我们可以设置自己的快捷键,甚至可以修改现有的快捷 键。更棒的是还可以对快捷键进行过滤,使它们只能在特定环境中使用。这就意味着同一个快捷键 可以用于不同的工作环境。 图 3-18 显示的是 Options 对话框中 Environment 部分的 Keyboard 节点,并选择了默认的键盘映 射方案。如果要改为使用另一个键盘映射方案,只需要从下拉列表中选择它,再单击 Reset 按钮。 如果觉得跟踪变化功能不是很有用,就可以在 Options 对话框中取消对 Text Editor | General | Track Change 项的选择,禁用这个功能。 第Ⅰ部分 集成开发环境 44 图 3-18 图 3-18 中间的列表框列出了 Visual Studio 2010 中的所有命令。但这个列表很长,而 Options 对 话框不能重置大小,所以浏览这个列表有些困难。为了便于搜索命令,可以使用 Show commands containing 文本框过滤命令列表。在图 3-18 中,用 Build 单词过滤列表,获得以该词开头或包含该单 词的所有命令。在这个列表中,选择了 Build.BuildSolution 命令。由于已经给这个命令指定了快捷 键,因此 Shortcuts for selected command 下拉列表和 Remove 按钮都是可用的。同一个命令还可能有 多个快捷键,所以下拉列表允许删除已指定的快捷键。 这个对话框的剩余部分允许给所选的命令指定新的快捷键。只需移动到 Press shortcut keys 文本 框,按下对应的键即可。在图 3-18 中,输入了 Ctrl+Alt+B 组合键,但这个快捷键已经由另一个命令 使用了,如对话框底部所示。如果单击 Assign 按钮,这个快捷键就会再次映射给 Build.BuildSolution 命令。 键盘映射方案在 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE 下存 储为.VSK 文件。这是在 Visual Studio 2005 以前的 Visual Studio 版本中使用的键盘映射 文件格式。要导入 Visual Studio 2005 中的键盘映射,可以使用导入设置功能(参见本章 的最后),对于更早的版本,可以把对应的.VSK 文件复制到上述文件夹中。下次打开 Options 对话框时,就可以从映射方案下拉列表中选择它了。 如果既想保持默认的快捷方式又想添加自己的快捷方式,就有多个快捷键是很有 用的,这样其他开发人员使用自己的设置时会觉得很舒服。 第 3 章 选项和定制 45 为了限制把一个快捷键仅用于 Visual Studio 2010 的一个相关区域,可以从 Use new shortcut in 下拉列表中选择环境。Global 选项表示快捷键应用于整个环境,但我们希望这个新的快捷键仅用于 编辑器窗口,所以在图 3-18 中选择了 Text Editor 项。 3.4.2 项目和解决方案 有几个选项与项目和解决方案相关。第一个选项可能是最有用的—— 项目的默认位置。在默认 情况下,Visual Studio 2010 使用标准的 Document and Settings 路径,就像很多其他的应用程序一样(如 图 3-19 所示),但这通常不是我们希望保存开发工作的地方。 图 3-19 也可以在这里更改模板文件的位置。如果公司使用普通的网络位置来存储项目模板,则可以更 改 Visual Studio 2010 中的默认位置,使其指向远程地址而不是映射网络驱动器。 许多其他选项都可以调整来改变在 Visual Studio 2010 中管理项目和解决方案的方式。一个比较 有趣的选项是 Solution Explorer 中的 Track Active Item。启用这个选项,当在各个项之间切换时, Solution Explorer 的布局就会变化,以确保当前项显示出来。这包括展开项目和文件夹(但不会再次 折叠),但在大型解决方案中,这个选项会带来麻烦,因为用户总是要折叠项目,才能继续浏览。 另一个与解决方案相关的选项是在 Solution Explorer 中列出杂项文件,但该选项没有显示在图 3-19 中。假定处理一个解决方案,要查找一个未包含在该解决方案中的 XML 文档。Visual Studio 2010 会顺利地打开这个文件,但每次打开这个解决方案时,都必须重新打开该文档。另一种方法是,如 果通过 Options 对话框启用 Solution Explorer 中的 Environment | Documents | Show Miscellaneous Files 命令,该文件就会临时添加到解决方案中。添加这个文件的杂项文件夹如图 3-20 所示。 第 52 章介绍了宏,可以创建和维护宏以简化代码的编写。另外,也可以给宏指 定快捷键。 第Ⅰ部分 集成开发环境 46 图 3-20 3.4.3 Build and Run 界面 Projects and Solutions | Build and Run 节点(如图 3-21 所示)可用于控制 Visual Studio 2010 的构建 操作。第一个要注意的是 Before Building 选项。在使用默认的 Sava all changes 选项时,Visual Studio 会在编译之前应用所有对解决方案的修改。如果在构建过程中或者在调试已编译的代码时出现程序 崩溃,该选项可以确保代码的安全。如果不希望永久地保存所做的改变,可以把这个选项改为 Prompt to save all changes,但不推荐这么做。这个设置会通知用户在解决方案中有未保存的修改,并允许在 编译前再次检查这些修改。 图 3-21 为了减少构建解决方案的时间,可以增加平行构建的最大数。只有项目不相互关联,Visual Studio 2010 才能平行构建项目,但如果有非常多的独立项目,平行构建就会产生显著的效益。注意在单核 或单处理器的机器上,这会增加构建解决方案的时间。 Visual Studio 2010 会自动管理杂项文件列表,根据 Options 对话框中定义的文件 数,仅保留最近的文件。可以让 Visual Studio 在这个列表中至多保存 256 个文件,而 这些文件根据它们的最后一次访问时间来删除。 第 3 章 选项和定制 47 图 3-17 显示了项目在过期时会“总是构建(Always build)”,如果有构建错误,解决方案就不会 启动。这两个选项可以提高效率,但要注意它们不会启动给用户显示当前执行任务的对话框。 3.4.4 VB 选项 VB 程序员可以在项目级或文件级上配置 4 个编译器选项。还可以在 Options 对话框的 Projects and Solutions | VB Defaults 节点上设置其默认值。Visual Basic 的以前版本使用 Option Explicit,它强 制在代码中,变量在使用之前先定义。在介绍这个选项时,许多专家都推荐永久打开这个选项,因 为这会在 VB 应用程序中避免许多因变量的不正确使用而导致的运行时问题。 Option Strict 通过强制开发人员明确把变量转换为正确的类型,进一步强制使用较好的编程方 式,而不是让编译器猜测正确的转换方法,这样运行时问题较少,并且性能更好。 3.5 导入和导出设置 一旦把 IDE 设置为自己满意的配置,就可以备份设置以供将来使用。这需要把 IDE 设置导出到 文件中,以后可以使用该文件来还原设置,甚至可以把设置传输到一系列 Visual Studio 2010 安装包 中,这样就可以共享相同的 IDE 设置。 要导出当前的配置信息,选择 Tools | Import and Export Settings,启动 Import and Export Settings Wizard(导入和导出配置向导),如图 3-22 所示。导入和导出配置向导的第一个步骤是选择 Export 选 项,然后为导出过程选择需要备份的配置。 图 3-21 中最后一个要注意的选项是 MSBuild project build output verbosity。在大多 数情况下,Visual Studio 2010 构建输出足以调试构建错误。但在一些情况下,尤其是 构建 ASP.NET 项目时,就需要增加冗长以诊断构建错误。Visual Studio 2010 新增的功 能是,可以以独立于输出的方式控制日志文件冗长。 强烈建议使用 Option Strict 以确保代码不隐式转换变量的类型。如果不使用 Option Strict 以及所有新的语言特性,就不能高效地利用语言。 Options 对话框中的 Environment | Import and Export Settings 节点可以指定团队设 置文件。它可以放在网络共享上,如果该文件有变化,Visual Studio 2010 就会自动应 用新设置。 第Ⅰ部分 集成开发环境 48 图 3-22 如图 3-22 所示,可以导出各种组别的选项。在此图中展开了 Options 区域,表明 Debugging 和 Project 设置会与 Text Editor 和 Windows Forms Designer 配置一起备份。小的惊叹号图标表明,某些 设置不会包含在默认导出中,因为它们包含的信息可能会泄漏隐私。如果希望把它们包含在备份中, 则需要手动选择这些区域。选择了希望导出的配置后,可以按照向导的指示完成导出过程。根据要 导出的选项数,备份过程可能需要几分钟时间。 导入一个设置文件也非常简单。使用同一个向导,但在第一个界面上选择 Import 选项。向导允 许先备份当前的配置,而不是简单地重写当前的配置。 然后需要在一个预置的配置文件列表中选择(与第一次启动 Visual Studio 2010 时所选择的文件 组相同),或者找到以前创建的一个配置文件。选择配置文件以后,可以选择仅导入配置的某些区域 或导入全部内容。 向导并没有默认包含所有的区域,如 External Tools 和 Command Aliases 列表,这可以避免无意 间重写自定义的设置。如果希望进行完整还原,就确保选中这些区域。 3.6 小结 本章介绍了一组有效的核心选项,利用这些选项可以开始改变 Visual Studio 界面以适应自己的 编程风格;还有许多其他的选项也可用。这些选项可以调整编辑代码的方式、在窗体中添加控件、 甚至选择调试代码时使用的方法。Visual Studio 2010 Options 页面中的设置还可以控制应用程序的创 建方法和创建位置,甚至定制自己使用的快捷键。本书的其他地方还会根据特定的功能介绍 Options 对话框,如编译、调试和编写宏。 如果想将 Visual Studio 2010 的配置还原为默认的预设,可以在向导的起始屏幕中 选择 Reset All Settings 选项,而不是执行一遍导入操作。
还剩70页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 6 人已下载

下载pdf

pdf贡献者

Node774

贡献于2012-10-19

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf