2015年在Linux中运行.NET应用程序

TL; DR:现在在Linux上运行VS2015解决方案有哪些选择?


我有一个在Windows中运行良好的.NET应用程序,并且已经收到将它移植到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 Service项目,它简单地调用ServiceCore的Main函数,而ServiceConsole在控制台应用程序中执行相同的操作(出于调试的原因,因为无法从Visual Studio中调试Windows Service项目)。

CommonStuff和ServiceCore都包含很多.NET库以及一些第三方DLL。 没有Windows特定的代码,但没有任何pinvoke或时髦的东西。

如果我们考虑ServiceConsole成为我想在Linux上运行的应用程序 - 我需要做些什么来实现它? 编译Hello World是一回事,但现在,所有的thoese引用......我不知道从哪里开始。 另外,我甚至无法在Linux(专有代码)中编译代码,因此我需要在Windows中编译代码,并将编译后的dll / exe直接在Linux中运行 - 这是可能的吗? 我见过几篇文章说Mono可以运行编译的应用程序,但是我所见过的每一个Mono都是从编译开始的。 另外我不确定这个vNext是什么。 我阅读了有关在Linux中运行代码的能力,如果它的目标是.net 6 ...但我不知道它是如何或意味着什么。

如果有人可能需要一些时间详细解释当前的选项,以及对于专业应用程序是否现实,或者它仅适用于Hello Worlds,我将不胜感激。

谢谢

编辑:好吧,所以它似乎我可以在VS编译我的代码,并以某种方式运行它在Linux上使用单声道 - 如何?


我经常在Windows上使用Visual Studio 2015开发多平台或仅Linux的复杂应用程序。 你可以在VS中编译它,复制到linux并运行 - 几乎总是这样才行。 如果您认真开发,您可能希望在mono下进行编译,以发现一些缺少的方法不同的签名,但这不是必需的。

现在,Windows服务可以更改为只是控制台应用程序。 基本上它只是由外部工具管理的控制台应用程序。 在Linux上,有不同的工具可以让你管理(启动停止失败重启等)你的“服务”应用程序。

对于Web应用程序,我通常使用ServiceStack,它在单声道上运行时没有问题。 你甚至可以在nginx后面自主托管它作为控制台应用程序。 您也可以在apache nginx下托管asp.net应用程序,只需很少或不需要更改代码。

半年前,我将从windows服务器开发到CentOS 7服务器的大型项目“移植”了两年,主要通过将东西复制到centos并运行(几乎没有变化,不需要在单声道下重新编译)。 当然,这个项目有很多第三方依赖项,并且这些依赖项的一些开发者甚至不知道mono是否存在。 不过,他们只是工作。 该解决方案有大约90个VS项目。

当然,并不是每个复杂的项目都很容易移植,特别是如果您经常使用本地库,但通常情况并非如此。 另外,如果你使用sql server,请注意单声道的sql server驱动程序是非常糟糕的,根据我的经验。 如果我有选择,我使用postgre并避免单声道sql服务器。 在单声道中处理图像也不是很好,越野车和不稳定。 我不惜一切代价避免使用Bitmap类,并改为使用imagemagick C api。 但是,只有在进行严肃而广泛的成像时,您才需要在那里完成基本任务。

长话短说 - 在2015年在Linux中运行.NET应用程序现在不是问题。

更新。 如果你已经在2018年了 - 几乎没有理由在Linux上使用mono,除了Xamarin的移动应用程序开发,使用Unity的游戏开发或UI应用程序之类的特定情况。 如果您只需要定期的控制台服务应用程序(包括Web服务器) - 使用.NET Core。 它已经足够稳定和足够快的生产使用,并从我的经验 - 已经比单声道少得多的车。 将完整的.NET mono应用程序移植到.NET Core大多数情况下相对简单,但某些库可能尚未在新平台上提供。 但是如果你正在开始新项目 - 毫无疑问地选择.NET Core。

链接地址: http://www.djcxy.com/p/90105.html

上一篇: Running a .NET app in Linux in 2015

下一篇: Mono Application Compiled Under Linux Does Not Run in Windows