我正在尝试使用Mono,但我正在努力处理有关SO的文档,博客和其他问题.希望这个问题对其他人有用.
我想使用VS2013在C#中编写数据提取过程,因为那是我的母语,但我需要在Linux机器上运行它.没有UI,它是一个控制台应用程序.
假设在目标Linux机器上安装了Mono(但不是MonoDevelop),我是否需要以不同的方式编译我的.csproj,以便在Linux上的Mono'CLR'下运行,如果是这样,我如何编译项目,而不是示例编译单个.cs文件?
我应该安装MonoDevelop for Windows,在该IDE中打开我的解决方案/项目并为Linux编译它,复制输出文件并运行.exe吗?
否则,在Mono下,在MSBuild编译的.EXE程序集中的IL"只能在Linux上工作",并且引用的程序集可以正常加载(假设它们都在输出文件夹中)?我必须复制任何.NET Framework程序集吗?
ken*_*ken 15
您的问题的一个非常好的答案在于Mono FAQ:
Mono Binary是否与Windows兼容?
是的,Mono与Windows二进制兼容.这意味着您可以运行Microsoft和其他供应商的.NET编译器生成的二进制文件.
移植应用程序时,应确保将其功能测试为底层操作系统的差异,并且VM实现中的差异(错误,缺少的功能)可能会影响您的应用程序.
Mono没有实现所有.NET 1.1 API(请参阅Mono 1.0的Mono发行说明),当从Windows执行二进制文件时,使用未实现的API时,您可能会收到一条关于未找到令牌的模糊消息.
在这些情况下,使用Mono的C#编译器编译应用程序非常有用,只是为了确保您使用受支持的API.
这不是一个完美的解决方案,因为Mono中的某些API在某些情况下会抛出NotImplementedExceptions,因此您仍然应该使用Mono测试您的应用程序.如果您关心应用程序的可移植性,请检查迁移分析器MoMA.
是否有任何理由在Mono上构建而不是使用Visual Studio并复制二进制文件?
通常,如果您觉得这样做,可以继续使用Visual Studio编写代码.
使用Linux开发将鼓励您更频繁地在Linux上测试您的软件,如果您有机会,它还将帮助您"自食"您自己的产品.
这个常见问题解答有点旧(它正在讨论Mono 1.0),但上述情况仍然适用于我的经验.使用Mono(或在MonoDevelop或Xamarin Studio中进行开发)进行编译总是很好,以确保您不使用任何Microsoft特定的库.
至少,您应该使用可以在没有Visual Studio的情况下运行的测试套件(因此,请避免使用内置的Microsoft测试工具).这样,您就可以在计划部署的所有系统上运行测试.MonoDevelop附带NUnit,可在Windows,Linux和OS X上运行.
一些快速,额外的想法:
System.IO.Path.PathSeparator.System.Environment.NewLine而不是换行(\n)和回车(\ r).