为什么需要这个功能?
这个功能,主要是解决COM interop的问题的。举个最常见的例子,如果我们需要在.NET程序里面调用Office组件,以前的情况是(以Excel为例)
这里的最大问题就是,如何确保开发环境与实际使用环境的Office版本一样。事实上,你无法确保这一点。
等价类型的意思就是,将当前程序中所用到的有限的那些COM类型,导入到当前程序集中,并且生成等价的.NET类型,如此一来,就可以不再依赖PIA,而可以方便地部署了。
如何使用该功能?
使用该功能其实很简单。你可能在不知不觉中已经在使用了。
3. 编写如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var app = new Application();
app.Visible = true;
Console.Read();
}
}
}
我们这里实现的功能很简单,只是启动了一个Excel的实例而已。
4. 运行调试
一个新的Excel程序窗口被打开了。
那么,究竟发生了什么呢?既然说是等价类型,会将我们用到的COM类型导入,如何理解呢?
我们看到,在程序集里面,实际上多出来一个特殊的命名空间(Microsoft.Office.Interop.Excel),然后它下面只包含当前我们的代码所必须访问的那些类型(实际上是导入过的),从这一点上看,Visual Studio是一个很智能的工具。
private static void Main(string[] args)
{
Application application = (Application)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("00024500-0000-0000-C000-000000000046")));
application.Visible = true;
Console.Read();
}