我可以使用 .NET DLL 来解决 MONO NotImplementedException

Posted

技术标签:

【中文标题】我可以使用 .NET DLL 来解决 MONO NotImplementedException【英文标题】:Can i use a .NET DLL to solve a MONO NotImplementedException 【发布时间】:2019-06-19 06:45:49 【问题描述】:

我正在尝试使用 HttpListener 设置超时

HttpListener listener;

void Foo()

    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(5);

但是,这会在我的 Unity 应用程序中引发 NotImplementedException。 TimeoutManager 属性是在 .NET 4.5 中添加的,在 Unity 2019.1.0a10 中(在 2018.3 中具有相同的行为)我目前正在使用当前 defaults to .NET 4.6 的 .NET 4.x 运行时。

为了验证这不是我搞砸的,我制作了一个针对 .NET 4.6 的单独 C# 项目并制作了以下程序:

private static void Main(string[] args)

    HttpListener listener = GetNewListener();
    Console.WriteLine(listener.TimeoutManager.IdleConnection);

    HttpListener listener2 = new HttpListener();
    SetIdleTimeout(ref listener2, 10);
    Console.WriteLine(listener2.TimeoutManager.IdleConnection);

    Console.ReadLine();


public static void SetIdleTimeout(ref HttpListener listener, int timeout)

    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(timeout);


public static HttpListener GetNewListener()

    HttpListener listener = new HttpListener();

    listener.TimeoutManager.IdleConnection = TimeSpan.FromMinutes(5);
    listener.TimeoutManager.HeaderWait = TimeSpan.FromMinutes(5);
    listener.TimeoutManager.DrainEntityBody = TimeSpan.FromMinutes(5);

    return listener;

按预期运行,并分别记录 00:05:0000:10:00

现在知道它实际上可以在 Unity 之外工作,我将此程序构建到一个 DLL 中并将其包含在我的 Unity 项目中,希望调用 GetNewListener 将使用 dll 框架的 @987654330 实现@ 从而能够设置它。但这也会导致NotImplementedException

有没有办法解决它没有统一实现、使用 DLL 或自己实现的事实?还是尝试与 Unity 联系并希望他们实施的唯一解决方案?


编辑: 我被提醒 Unity 实际上使用 mono,并且在他们的 github 上查看 HttpListenerTImeoutManager 的单声道实现确实显示了 throw new NotImplementedException ();

现在我原来的问题仍然存在:有没有办法用 DLL 中的 .net 实现覆盖 mono 实现?

【问题讨论】:

您在 Unity 应用程序中的目标是哪个框架? @yenta 针对 .NET 4.6 您使用的是哪个版本的 Unity? 2019.1.0.a10,在 2018.3 中具有相同的行为。 您是否将 Unity 中的 .NET 配置文件更改为更新的配置文件?您可以在播放器设置中更改 .NET 配置文件(转到编辑 > 项目设置)。 【参考方案1】:

我认为您可以尝试使用 Harmony 之类的方法在 Mono 的 HttpListener 上修补 TimeoutManager 方法。

【讨论】:

这看起来很有希望,谢谢!会看看的! 我刚刚发布了 Harmony v2.0rc2,它支持更多的用例并且有更好的文档:github.com/pardeike/Harmony 文档:harmony.pardeike.net

以上是关于我可以使用 .NET DLL 来解决 MONO NotImplementedException的主要内容,如果未能解决你的问题,请参考以下文章

使用系统调用调用mono-2.0-sgen.dll获得“不是有效的Win32应用程序”

调试从 C++ 调用的 C# dll(嵌入 Mono)

如何利用mono执行.net程式

在 ubuntu 上使用 mono 的 C# DLLimport:不收取 dll

Mono(Linux,C#):无法找到同一文件夹中的DLL(System.DllNotFoundException)

在 Mono / MySQL 上运行的 .NET 的免费 OLAP 解决方案