我正在尝试使用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程序集吗?
答案 0 :(得分:14)
你的问题的一个非常好的答案在于Mono FAQ:
单声道二进制是否与Windows兼容?
是的,Mono与Windows二进制兼容。这意味着你可以 运行Microsoft和其他.NET编译器生成的二进制文件 供应商。
移植应用程序时,应确保对其进行测试 功能作为底层操作系统的差异和 VM实现(错误,缺少功能)的差异可能会 影响你的申请。
Mono没有实现所有.NET 1.1 API(请参阅Mono Mono 1.0)的发行说明以及从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 \ n)。答案 1 :(得分:2)
按照设计,Mono应该被编译一次并在任何地方执行。如果在Windows和Linux上编译相同的程序,它们应该是二进制等价的。你不应该做任何额外的事情。
阅读他们的FAQ,特别是第二个问题:“Mono Binary是否与Windows兼容?”
是的,Mono与Windows二进制兼容。这意味着你可以 运行Microsoft和其他.NET编译器生成的二进制文件 供应商。