Microsoft.Office.Interop.MSProject在运行时给出null,但在Visual Studio调试器中具有值

时间:2014-07-30 17:47:41

标签: interop ms-project

我遇到了与Microsoft.Office.Interop.MSProject交谈有关的奇怪问题。我将MSProject 2013与Office.DLL v15和Microsoft.Office.Interop.MSProject.DLL v15一起使用。我们正在更新我们的程序,该程序在我们的产品和项目之间同步数据以使用最新的DLL,以支持MSProject 2013.我将附加代码图像,以便您可以看到我的内容看到。

我有一个局部变量,使用Interop类为项目赋值。

'汇编Microsoft.Office.Interop.MSProject     C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Visual Studio Tools for Office \ PIA \ Office15 \ Microsoft.Office.Interop.MSProject.dll'

我正在寻找Project.ProjectStart中的值,当我使用监视窗口时显示一个值。

Watch Window Shows Value for Project.ProjectStart = valid value

但是,当代码实际执行时,Project.ProjectStart的值= Null。

Scope Shows Value for Project.ProjectStart = Null

我检查过的事情:

  • 确保所有项目都构建到x86,并且我使用的项目是x86。但是,我使用的是64位Win7机器。这可能是x86 vs x64 dll问题吗?

这是一个绊脚石。如果你可以帮助我,我会给你买一个Mountain Dew;)

找到答案!!!

此解决方案适用于所有Office办公应用中的所有Microsoft.Office.Interop类似问题。

这是我在MSDN上开始的一个帖子,它找到了我的答案。 http://social.msdn.microsoft.com/Forums/office/en-US/079ed850-b8ee-4d5f-93ad-a31f6d9c2607/microsoftofficeinteropmsproject-throwing-systemnotimplementedexception?forum=officegeneral#079ed850-b8ee-4d5f-93ad-a31f6d9c2607

您是否尝试使用后期绑定技术(请参阅Type.InvokeMember)来获取值?有帮助吗?是!是和回答。 Type.InvokeMember有效。

以下是我现在用来访问这些成员的代码段。

    public DateTime LateBindProjectStart()
    {
        try
        {
            if (project != null)
            {
                if (project is Microsoft.Office.Interop.MSProject.Project)
                {
                    DateTime dtStart = (DateTime)(typeof(Microsoft.Office.Interop.MSProject.Project).InvokeMember(
                        "ProjectStart",
                        BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
                        null,
                        project,
                        null));
                    return dtStart;
                }
                else
                    return DateTime.MinValue;
            }
            else
                return DateTime.MinValue;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

0 个答案:

没有答案