gpt4 book ai didi

c# - linux下的topshelf和.net core

转载 作者:行者123 更新时间:2023-12-05 08:31:38 26 4
gpt4 key购买 nike

我有一个使用 topshelf 作为服务启动的简单应用程序,它看起来很简单:

 HostFactory.Run(x =>
{
x.Service<RequestService>();
x.RunAsLocalSystem();
});

很好用,但在 windows 下。当我在 Linux 下尝试这个时,我得到:

Topshelf.Runtime.Windows.WindowsHostEnvironment Error: 0 : Unable to get parent process (ignored), System.DllNotFoundException: Unable to load shared library 'kernel32.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libkernel32.dll: cannot open shared object file: No such file or directory

有人遇到过这个问题吗?我试着用谷歌搜索它,但有人说它可以工作,但它是仅适用于 Windows 的工具。

或者也许有一些其他的.net core 服务提升框架?

最佳答案

Topshelf 没有被宣传为跨平台的,因此它没有(或在撰写本文时没有)官方支持非 Windows 环境上的 .Net Core,即使它可以在其中运行(至少当时是这样)写作,见下文)。

解决方案是在非 Windows 主机上运行时更改环境构建器。

这是我项目中的一个例子。创建服务时,根据主机操作系统在运行时选择环境构建器。

HostFactory.Run(c =>
{
// Change Topshelf's environment builder on non-Windows hosts:
if (
RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ||
RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
)
{
c.UseEnvironmentBuilder(
target => new DotNetCoreEnvironmentBuilder(target)
);
}

c.SetServiceName("SelloutReportingService");
c.SetDisplayName("Sellout Reporting Service");
c.SetDescription(
"A reporting service that does something...");
c.StartAutomatically();
c.RunAsNetworkService();
c.EnableServiceRecovery(
a => a.RestartService(TimeSpan.FromSeconds(60))
);
c.StartAutomatically();
c.Service<SelloutReportingService>();
});

关于c# - linux下的topshelf和.net core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56752046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com