仅当在我的代码中显式访问属性时,才能通过反射访问Task属性

时间:2019-05-02 18:43:55

标签: c# reflection task ms-project

我正在尝试通过Task访问MS Project中System.Type.GetProperty("Finish")的属性,但是看起来该属性(以及其他类似的属性,例如Number1)不可访问通过反射,除非我的代码专门使用该属性。这是我可以更改的编译器设置吗?我正在编写一个同步引擎,因此无法提前告知客户端系统可能请求Task的哪个字段。

因此,在下面的示例中,info将为空。

System.Type ty = typeof(Task);
System.Reflection.PropertyInfo info = ty.GetProperty("Finish");

但具有以下代码的info作为有效的PropertyInfo对象返回。

Task tk = activeProject.ProjectSummaryTask;
object done = tk.Finish;
System.Type ty = typeof(Task);
System.Reflection.PropertyInfo info = ty.GetProperty("Finish");

我基本上希望GetProperty()能为Task的API中列出的所有属性工作(相当多)。

以下是Finish属性的API链接:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.msproject.task.finish?view=office-project-server

1 个答案:

答案 0 :(得分:0)

使用GetField对象的Task方法返回变量字段的值。

您需要通过内部字段ID来标识该字段-使用固有常数(例如pjTaskFinish)或其数值(188743716)。

或者,您可以使用Application对象的FieldNameToFieldConstant方法将友好字段名称转换为常量。

p.s。文档的VBA版本包含更多信息;大多数(如果不是全部)对象/方法/属性都相同。