2017-02-20 84 views
0

我想用下面的代码来获得Microsoft.Office.Interop.Excel.Range接口的属性列表:Type.GetProperties返回空数组

using Excel = Microsoft.Office.Interop.Excel; 
PropertyInfo[] info = typeof(Excel.Range).GetProperties(); 

但结果是一个空的数组:System.Reflection.PropertyInfo [0]

我错过了什么吗?

+0

'Microsoft.Office.Interop.Excel'是所有COM对象。反思时,这些可能会很奇怪。你想要做什么,获得Range对象的属性是解决你的问题? –

+0

@ScottChamberlain我的目标是一个能够显示Excel对象属性(不是特定范围)的工具,并且使用反射来获取属性列表似乎是最省力的方法。但我花了一段时间试图在网上找到答案,为什么没有typeof(Excel.Range).GetProperties()返回一个属性列表。 – Roman

回答

1

自VS2010导入Office主互操作程序集(PIA)时,包含类型定义的默认机制是将它们作为主程序集的一部分而不是单独引用的库(Dll)嵌入。此嵌入过程的一部分是从嵌入式定义中删除未引用的类型成员。

在Solution Explorer中,展开References节点并选择Interop.Microsoft.Office.Interop.Excel,然后右键单击) - > Show Properties。您应该看到如下所示:

Property View 将“Embed Interop Types”更改为false,验证“Copy Local”也已自动更改为True。为“Interop.Microsoft.Office.Core”和“Interop.VBIDE”做同样的事情。

现在,当你反映的托管包装互操作类型,你会得到完整的类型定义。

+0

谢谢!我没有参考文献中的“Interop.Microsoft.Office.Core”和“Interop.VBIDE”。我更改了“Office.dll”(... \ Visual Studio工具的Office \ PIA \ Office15 \ Office.dll)嵌入到false,它现在正在工作! – Roman