如何以编程方式保存 Microsoft Project Online 项目的副本?

How to programmatically save a copy of a Microsoft Project Online project?

我需要经常在 Microsoft Project Online 上保存我的 PWA 实例中存储的所有项目的本地副本。我有数百个,所以手动操作不是一种选择。

我已经能够使用 Project Server CSOM and .NET 连接到 PWA 实例并读取数据。但我无法在 Microsoft.ProjectServer.Client 命名空间中找到导出此数据并将其保存到任何 MS Project 可读文件的本地方法。

这有可能吗?

或者,欢迎使用不涉及 Project Server CSOM 的任何其他方式来实现此目的。

编辑:我还尝试通过 Project Online REST API 获取数据,因此我可以获得一个 XML 文件,我可以像使用 MSPDI 文件一样使用它。但是 MS Project Professional(桌面应用程序)和 MPXJ library 都没有识别它,我可能需要做一些重大的转换,但这并不能保证它能正常工作...

最后我决定走 "ugly but working" 的路,直接告诉 MS Project 桌面客户端连接,打开并在本地保存项目,用一些 C# 代码:

private static void start()
{
    var objProcess = Process.Start(@"winproj.exe", "/s https://PWA-URL");
}

static void Main(string[] args)
{
    var backgroundThread = new Thread(new ThreadStart(start));
    backgroundThread.Start();
    Thread.Sleep(10000);

    ApplicationClass objProject = new ApplicationClass
    {
        Visible = false
    };

    object oMissing = System.Reflection.Missing.Value;
    object oFile = @"<>\test-project";
    object oFormat = "MSProject.mpp";
    object oReadOnly = true;
    objProject.DisplayAlerts = false;

    objProject.FileOpen(oFile, oReadOnly, PjMergeType.pjDoNotMerge, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oFormat, oMissing, PjPoolOpen.pjPoolReadOnly, oMissing, oMissing, oMissing, oMissing);
    objProject.FileSaveAs(@"C:\Windows\Temp\LocalCopy.mpp");
    objProject.Quit(PjSaveType.pjDoNotSave);
}

Windows凭据用于连接到 PWA,虽然可以指定不同的用户和密码但我没有尝试过 (ApplicationClass.FileOpen)。

还应该导入 Microsoft.Office.Interop.MSProject.dll 来编译项目。