【问题标题】:suggestion related to dll running on linux关于在 linux 上运行的 dll 的建议
【发布时间】:2021-04-07 01:28:10
【问题描述】:

我是新手,对 Linux 有一点了解。说了这么多,总结一下我的问题。我有一个用 winforms 编写的大型应用程序,我希望它在 ubuntu 上运行。我使用了 mono,但是在运行 mono 迁移分析器后,P/invoke 没有迁移,所以我使用 wine 来运行应用程序。

使用wine,应用程序中的大部分部分工作正常,但在很多情况下崩溃并且性能也很慢。我将消息发送到他们的论坛,但未解决,如 here

在 wine 之后,我尝试查看在 ubuntu 上运行应用程序的可能平台。其中一个使用 Avalonia UI 作为前端,C# 代码将被重用。所以我创建了一个原型来查看应用程序是否崩溃或抛出任何异常。它显示了 DLLNotFoundException,在联系 AvaloniaUI 支持后指出 dll 仅在 Windows 平台上工作,如 here

现在我搜索了解决方案,但大多数人告诉我使用 wine 或 mono,一些旧的解决方案告诉我使用 gcc,如 herehere 所示,但 gcc 只能编译 c 和 C++。

谁能指导我在这里做什么。

【问题讨论】:

  • 你准备在你的应用程序中重写什么,你想要实现什么,我的意思是你需要一个跨平台的解决方案,一个 ubuntu 唯一的解决方案吗?是什么阻止您将其改写为在 ubuntu 上运行良好的东西。关于在 ubuntu 上运行的其他内容,忽略 wine 和 mono .net 核心运行在那里,但对 GUI 没有任何好处,除非你用 web 前端和本地服务器(例如 Kestrel)运行重写它。如果你只是希望它在 c# 和 Visual Studio 中,你可以使用 xamarin,但是你手上会有相当大的重写,听起来都不是很好。
  • 对avalonia不太了解,所以我无法对此发表评论。
  • 我想在跨平台上重写应用程序,对于 GUI,我使用使用 xaml 设计前端的 avalonia。我在 avalonia 中创建了一个程序并显示了 GUI。问题出在 netapi32.dll 上,它在 ubuntu 上不起作用(我只在 ubuntu 中测试它)。 In this link you can view the error when running it on ubuntu

标签: c# linux mono wine avalonia


【解决方案1】:

我看了你评论的截图。

您的问题与 Avalonia 无关,因为 Avalonia 是 UI 框架,而您正在调用网络例程,例如 NetApiBufferFree(IntPtr buf)。

我想,您可能需要寻找“如何以跨平台方式列出本地网络中的所有计算机”问题的答案。

我认为您可能需要将解决方案拆分为单独的项目:

第一个是接口,它的目标是一个应用程序,

第二个应该包含你的 Windows 逻辑,代码如下:https://morgantechspace.com/2014/04/get-list-of-network-computer-names-in-c-sharp.html#Get-Network-PC-Names;

第三个可能包含您对 Linux 特定例程的调用;在那里你应该检查如何在 C# 上调用 Linux 系统例程。关于这个主题的信息较少,但我会从这里开始:Get list of devices on LAN in C

第一个项目应该依赖于第二个和第三个。

显然,您的解决方案应该针对 .NET Core;或单声道。

【讨论】:

  • 问题是我的项目中有许多其他 dll 正在运行。我随机选择使用 netapi32.dll。对于您共享的窗口,我有相同的逻辑。 The link you provide is for C and i want to work on C# 总而言之,是否有任何选项可用于在 linux 中使用 netpi32 或任何其他 dll。我的解决方案内置在 .net 核心中,我也将其安装在 linux 上。
  • @JunaidAmjad 提出一个新问题 - 如何在 Linux 上使用 pinvoke。您需要调用 Linux 的系统例程来解决此任务。并且系统例程在C上调用。你不能在linux上原生使用netapi32,它是Windows的原生网络库
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2011-12-25
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多