TL; DR:现在在Linux上运行VS2015解决方案有哪些选择?
我有一个.NET应用程序在Windows中运行良好,并已收到将其移植到Linux的请求.我一直在努力去理解今天它在2015年意味着什么,但我真的很困惑所有指向Mono的旧帖子以及关于vNext的新帖子(并且仍然提到Mono).我也有一个很好的.NET背景但我对Linux一般都不太了解...
我按照最近的教程编写并在Linux中编译并运行Hello World控制台应用程序.这需要安装一些我不知道的东西,包括Mono,然后运行一些"k"命令(kpm restore,kpm build,k run).但是现在我不知道如何继续我的真实案例场景.
我有一个VS2015解决方案,它有很多项目,但这里只有4个值得一提: - CommonStuff - ServiceCore - ServiceWindows/ServiceConsole
所有代码都在ServiceCore项目(类库)中,它本身具有对CommonStuff(另一个类库)的引用.ServiceWindows是一个Windows服务项目,只调用ServiceCore的Main函数,ServiceConsole在控制台应用程序中执行相同的操作(出于调试原因,因为无法从Visual Studio调试Windows服务项目).
CommonStuff和ServiceCore都包含许多.NET库以及一些第三方dll.没有Windows特定的代码,没有pinvoke或时髦的东西.
如果我们认为ServiceConsole成为我想在Linux上运行的应用程序 - 我需要做些什么来实现它?编译Hello World是一回事,但是现在,所有的thorsse引用...我不知道从哪里开始.另外,我甚至无法在Linux(专有代码)中编译代码,因此我需要在Windows中编译代码并且编译的dll/exe直接在Linux中运行 - 这是可能的吗?我看过一些帖子说Mono可以运行已编译的应用程序,但我看到的每一个Mono turorial都是从编译开始的.另外我不确定这个vNext是什么.我读过关于在Linux中运行代码的能力,如果它针对.net 6 ...但我不知道它是如何或意味着什么.
如果有人花些时间详细解释现在的选项是什么,以及它是否适用于专业应用程序,或者它是否只对Hello Worlds有用,我将不胜感激.
谢谢
编辑:好的,所以我似乎可以在VS中编译我的代码,并以某种方式在Linux上使用Mono运行它 - 如何?
嗨,我正在尝试使用mono-service2从visual studio运行一个股票Windows服务项目.我正在使用mono 2.0和编译器在debian上运行它.
gmcs *.cs -pkg:dotnet
Run Code Online (Sandbox Code Playgroud)
我尝试从这开始(我尝试使用-d设置为dir与app和-n,-m设置)
mono-service2 -l:service.lock --debug Program.exe
Run Code Online (Sandbox Code Playgroud)
唯一的代码更改是添加用于测试的writelines
Service1.cs
using System;
using System.ServiceProcess;
namespace spikes
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Console.WriteLine("starting...");
}
protected override void OnStop()
{
Console.WriteLine("stopping....");
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是这个错误
Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Mono.Unix.Native.Syscall ---> System.DllNotFoundException: libMonoPosixHelper.so
at (wrapper managed-to-native) Mono.Unix.Native.Syscall:_L_ctermid ()
at Mono.Unix.Native.Syscall..cctor () [0x00000]
--- End of inner exception …Run Code Online (Sandbox Code Playgroud) 我有一个.NET Windows服务,我想在Linux上移植到Mono.
在Linux上安装服务的正确方法是什么,以便它像Windows服务一样工作(即自动启动,在没有用户登录时运行等)?
我正在移植一个在启动时在 Windows 中作为后台服务运行的应用程序,我们正在将该应用程序移植到 linux(SUSE Enterprise 服务器),我对 Linux 完全陌生。有人可以帮我解决这个问题吗?喜欢