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运行它 - 如何?
我对 Go 甚至 Linux 都很陌生。
我在 Linux 环境中构建了一个应用程序,它使用基于 cgo 的 gtk 库(https://github.com/mattn/go-gtk/)。该应用程序在其本机环境(linux 64 位)中构建良好,但是当我尝试针对 darwin 64 位进行编译时,我得到以下结果:
# net
could not determine kind of name for C.AI_MASK
# net
could not determine kind of name for C.AI_MASK
Run Code Online (Sandbox Code Playgroud)
我用来构建的命令行:
env GOOS=$1 GOARCH=$2 CGO_ENABLED=1 go build $3
Run Code Online (Sandbox Code Playgroud)
其中 $1 是 darwin,$2 是 amd64($3 是我的应用程序的路径)。
由于错误似乎来自我导入的库,因此我不确定如何修复它。我还读到,交叉编译 cgo 并不能真正工作,因为它依赖于本机 macOS 的东西,因此需要在 mac 上构建。这是真的吗?或者我可以做些什么来让它在我的环境中发挥作用?
我也有点困惑,因为似乎大多数讨论这个主题的人都在谈论 go pre 1.5,如果我理解正确的话,在交叉编译方面这是完全不同的。
谢谢