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

Nic*_*las 16 .net linux mono

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运行它 - 如何?

Evk*_*Evk 16

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

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

对于Web应用程序,我通常使用ServiceStack,它在单声道上运行没有问题.您甚至可以将其作为控制台应用程序再次自我托管,位于nginx之后.您还可以在apache \nginx下托管asp.net应用程序,几乎不需要更改代码.

半年前,我"移植"了从Windows服务器到CentOS 7服务器开发了2年的大项目,主要是将内容复制到centos并运行(只需很少的更改,无需在单声道下重新编译).当然,该项目有许多第三方依赖项,而这些依赖项的一些开发人员甚至不知道单元存在.然而他们只是工作.该解决方案有大约90个VS项目.

当然,并非每个复杂项目都很容易移植,特别是如果您经常使用本机库,但通常情况并非如此.另外,如果你使用sql server,请注意单声道的sql server驱动程序从我的经验来看是非常糟糕的.如果我有选择的话,我使用postgre并避免单声道sql server.使用单声道图像也不是很好,有缺陷和不稳定.我不惜一切代价避免使用Bitmap类,而是转而使用imagemagick C api.但是,只有在你进行严肃而广泛的成像时,你才需要做到这一点,对于基本任务来说,没关系.

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

更新.如果你已经在2018年了 - 几乎没有理由在Linux上使用mono,除了特殊情况,比如使用Xamarin进行移动应用程序开发,使用Unity进行游戏开发,或者使用UI应用程序.如果您只需要常规的console\service应用程序(包括Web服务器) - 请使用.NET Core.它已经足够稳定和快速用于生产用途,而且从我的经验来看 - 已经比单声道更少的马车了.在大多数情况下,将完整的.NET\mono应用程序移植到.NET Core相对简单,尽管某些库可能尚未在新平台上可用.但是如果你正在开始新项目 - 毫无疑问选择.NET Core.

  • @Nicolas我从来没有使用过VisualBasic,所以对此没什么好说的......但是你可能想阅读文档 - http://www.mono-project.com/docs/about-mono/languages/visualbasic/ (2认同)