CLR全面透彻解析

目录

调整宿主

公开对象模型适配器、约定和加载项视图编写加载项协作加载项总结

您知道现在可以使用新的 Microsoft .NET 加载项框架 (System.AddIn) 创建可扩展的 Windows 窗体应用程序吗?在本期专栏中 ,我将修改 ShapeApp 绘图应用程序,以通过加载项框架公开其对象模型。这将 ,我就能够创建出在宿主应用程序上自动执行任务的加载项(自动化加载项)。 另外,我还将讨论此方案以及现有解决方案中的常见问题。

如果您在开始前需要了解有关加载项框架的背景信息,请参阅 CLR 加载项团 队博客上的资源页,网址为 go.microsoft.com/fwlink/?LinkId=117519。您还 可以考虑阅读以前的“CLR 全面透彻解析”专栏中有关加载项框架的 文章。

ShapeApp 是一个可供您使用基本形状进行绘图的绘图应用程序。您可以插入 新形状、随意移动它们、更改其颜色和大小等。它允许您将绘图保存到文件,并 在选项卡中打开多个绘图。在 ShapeApp 中创建的简单绘图,如图 1 所示。


图 1 ShapeApp 的屏幕快照

ShapeApp 由 Visual Studio Tools for Applications (VSTA) 团队开 发,作为示例可用于将 Visual Studio IDE 嵌入到您的应用程序中。该 IDE 可 随后用于为应用程序编写扩展。他们已提供了包含和不包含其可扩展代码的应用 程序版本。在本示例中,我先从基础版本开始,并调整它使其能够与加载项框架 配合使用。

调整宿主

在本部分中,我将调整应用程序以公开其对象模型,该模型与 HTML 中的文 件对象模型 (DOM) 很相似。这样,我就能够创建在应用程序中自动执行任务的 加载项。

调整宿主的第一步是定义宿主将要公开的对象模型(请注意,我还不需要编 写任何代码)。加载项框架的隔离和版本控制功能将对对象模型加以限制。通常 ,对象模型应定义加载项中将使用的但未内置在 .NET Framework 中的所有类型 ;换言之,视图程序集不应该引用除 .NET Framework 程序集以外的任何程序集 。明确禁止使用 MarshalByRefObject 类型。有关允许类型分类的详细信息,请 参阅博客上有关约定的帖子,网址为 go.microsoft.com/fwlink/? LinkId=117520。

图 2 列出了 ShapeApp 对象模型中的类型。此处列出的所有类都存在于宿主 应用程序的内部。稍后我将通过管道公开它们。

图 2 ShapeApp 类型

类型 说明
ShapeApplication 主应用程序对象。
Drawing 表示应用程序中绘图的对象。
Shape 表示绘图中形状的对象。
DrawingCollection 绘图对象集合。
ShapeCollection 形状对象集合。
EventArgs 相关类型 从 System.EventArgs 中派生的几种类型,用于自定义事件参 数。
时间: 2025-01-01 02:18:13

CLR全面透彻解析的相关文章

CLR全面透彻解析: .NET应用程序可扩展性

借助 Microsoft .NET Framework,编程人员便可轻松获取由不同开发人员和公司构建的组件,并将这 些组件集成到自己的应用程序中.但仅当已知哪些组件是构建基础时才能轻松实现上述过程.如果在构建 时对所需组件一无所知(对于加载项,通常会遇到这种情况),那么事情就会变得更加困难.开发人员在 扩展其应用程序时经常会遇到问题.例如,应将加载项存储在数据库中还是磁盘上?开发人员应考虑已知 接口的加载项以获得激活类型吗?使用 AppDomain.AppDomainManager 和 AppD

CLR全面透彻解析: 及早并经常评量性能,第2部分

在上期的"CLR 全面透彻解析"中,我强调要可靠地创建高性能的程序,您需要了解设计 初期所使用的各个组件的性能(msdn2.microsoft.com/magazine/cc424899).这就需要用到性能数据. 因此,测量是设计过程中不可或缺的一部分. 我还在那一期中介绍了一款名为 MeasureIt 的工具,利用它可以轻松地创建新基准,从而快速地收集 制定良好设计决策所需的数据.诸如 MeasureIt 之类的工具所提供的原始数字是极为重要的,另外,使 人们能够了解这些数字的基本含

CLR全面透彻解析-F#基础

F# 是一种面向对象的新型函数编程语言,用于 Microsoft .NET Framework,已集成到本年度发行的 Microsoft Visual Studio 2010 中.F# 集简单.简洁的语法与高度的静态类型化于一身.这种语言能够胜任的任务从 F# Interactive 中的轻量探索性编程直到使用 Visual Studio 进行的基于 .NET Framework 的大型组件开发. F# 设计为完全在 CLR 上运行.作为一种基于 .NET Framework 的语言,F# 充分

CLR全面透彻解析: CLR 4中的生产诊断改进

在公共语言运行库 (CLR) 团队,我们有个小组专门提供 API 和服务,供其他人构建托管代码的诊断 工具.我们所拥有(就专用的工程资源而言)的两个最大组件是托管调试和分析 API(分别是 ICorDebug* 和 ICorProfiler*). 与其他 CLR 和框架团队类似,我们也只能通过努力开发应用程序实现我们的价值.例如,Visual Studio 团队会将这些调试和分析 API 用于他们的托管调试器和性能分析工具,还有大量第三方开发人员 在使用分析 API 构建工具. 在过去 10 年

CLR全面透彻解析:CLR中的线程管理

本专栏基于 CLR 线程系统和任务并行库的预发布版本撰写而成.所有信息均有可能发生变更. 当前进行的从单核体系结构到多核体系结构的技术变革带来了诸多好处.举例来说,在线程环境中, 如果有效使用多个线程,便可通过使用多个核和并行性提高性能,例如,使用多线程对数据库进行多个独 立查询的 ASP.NET 应用程序. 但是,使用多个核会带来一些新的问题.您可能会看到编程和同步模型变得更加复杂,您需要控制并 发,而要调整和优化性能将会更加困难.此外,对于影响并发应用程序性能和行为的许多新因素,我们还 不是

CLR全面透彻解析:大型对象堆揭秘

CLR 垃圾回收器 (GC) 将对象分为大型.小型两类.如果是大型对象,与其相关的一些属性将比对象 较小时显得更为重要.例如,压缩大型对象(将内存复制到堆上的其他位置)的费用相当高.在本月的专 栏中,我将深入探讨大型对象堆.我将讨论符合什么条件的对象才能称之为大型对象,如何回收这些大型 对象,以及大型对象具备哪些性能意义. 大型对象堆和 GC 在 Microsoft .NET Framework 1.1 和 2.0 中,如果对象大于或等于 85,000 字节,将被视为大型对象.此数字根据性能优化

CLR全面透彻解析: 使用CoreCLR编写Silverlight

Silverlight 2 包含对 Windows Presentation Foundation (WPF) UI 框架所做的大量 更改:新控件.丰富的网络 API 和数字版权管理 (DRM) 支持.Silverlight 2 中的一项主要更改就是能 够使用与 Microsoft .NET 兼容的语言编写 Web 客户端.在本文中,我将重点介绍 Silverlight 的开发核心:CoreCLR. 在过去的十几年中,我们已经拥有了许多不同的 Web 编程技术,从 CSS 到 ECMAScrip

CLR全面透彻解析:托管和本机代码互操作性

目录 托管和本机代码互操作适用哪种场合? 互操作技术:三种选择 互操作技术:P/Invoke 互操作技术:COM Interop 互操作技术:C++/CLI 互操作体系结构注意事项 API 设计和开发人员体验 互操作边界的性能和位置 生存期管理 托管和本机代码互操作适用哪种场合? 有关使用托管和本机代码互操作适宜时机的论述并不多,现有的论述也以自相矛盾者居多.有时,指南还缺乏实践体验做依据.因此,我先声明我编写的这个指南以我们互操作团队的实践经验为基础,它已向各类内部和外部客户提供过帮助. 在总

CLR全面透彻解析: 及早并经常评量性能,第1部分

作为 Microsoft .NET Framework 公共语言运行库团队的性能架构师,帮助大家充分利用运行时 编写高性能的应用程序是我的职责所在.这无论是在 .NET 还是在其他语言中都不神秘--您 只需要在设计之初即考虑应用程序的性能问题即可.有很多应用程序在编写时根本未考虑性能问题.这通 常无关紧要,因为大多数程序的计算量相对较少,而且同和它们交互的人类相比,程序的计算速度要快得 多.遗憾的是,当真的需要程序具有较高性能时,我们却缺乏相关的知识.技能和工具来很好地实现这一 点. 在这里我将