实例化对象EliteDangerousAPI时特定于计算机的NullReferenceException

时间:2019-02-17 18:39:12

标签: c#

我正在尝试使用https://github.com/EliteAPI/EliteAPI提供的API,并根据上提供的示例创建了一个简单的应用程序。这样做完全符合昨天的预期,直到由于某种原因我的桌面崩溃了,此后,当应用程序尝试创建新的EliteDangerousAPI对象时,该应用程序崩溃并出现NullReferenceException:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

using EliteAPI;
using EliteAPI.Events;

namespace Elite_PI_Server
{
    class Program
    {
        private static EliteDangerousAPI EliteAPI;

        static void Main(string[] args)
        {
            DirectoryInfo playerJournalFolder = new DirectoryInfo(
            $@"C:\Users\{Environment.UserName}\Saved Games\Frontier 
Developments\Elite Dangerous");

            EliteAPI = new EliteDangerousAPI( playerJournalFolder );

            EliteAPI.Start();
        }
    }
}

我将代码剥离到了上面,我有一个朋友在他的机器上测试了此代码,并且运行良好。在我提到的崩溃之前,它在我的机器上运行良好。

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=EliteAPI
  StackTrace:
   at EliteAPI.Status.StatusWatcher.Update()
   at EliteAPI.Status.StatusWatcher..ctor(EliteDangerousAPI api)
   at EliteAPI.EliteDangerousAPI.Reset()
   at EliteAPI.EliteDangerousAPI..ctor(DirectoryInfo JournalDirectory, Boolean SkipCatchUp)
   at Elite_PI_Server.Program.Main(String[] args) in     C:\Users\paul\source\repos\Elite-PI-Server-Console\Elite-PI-Server\Program.cs:line 22

作为参考,我正在使用Visual Studio Community Edition 2017 15.9.7。关于我可以尝试的任何建议将不胜感激。

考虑到代码已被证明可以在另一台机器上工作,我尝试了其他一些繁琐的方法,这些方法似乎有些过头了:

我尝试卸载EliteAPI的nuget软件包,清除nuget软件包缓存并重新安装。

我尝试完全重新安装Visual Studio,并使用https://github.com/Microsoft/VisualStudioUninstaller清理安装。

任何建议将不胜感激。我感觉好像是我的机器死机了,或者我正在做一些愚蠢的事情。

1 个答案:

答案 0 :(得分:1)

我是EliteAPI的作者。

首先,感谢您使用该库! :)

很抱歉听到您遇到问题。

当API试图从Status.json文件中获取数据时,似乎发生了错误。您可以确认可以在C:\Users\<username>\Saved Games\Frontier Developments\Elite Dangerous上找到Status.json。另外,您是在开始游戏之前还是之后运行API?

如果有的话,最好与Discord进行进一步联系。这是我们的邀请链接:https://discord.gg/jwpFUPZ

谢谢!

编辑:尝试在EliteAPI.Logger.Log += (sender, arg) => Console.WriteLine(arg.Message);上方添加EliteAPI.Start();,以查看是否发出任何警告。