C# 便携式C语言的最佳实践#
我希望为linux/windows/mac/任何其他平台编写一些C#代码,并寻找可移植代码的最佳实践 这个项目有很多资源C# 便携式C语言的最佳实践#,c#,mono,cross-platform,C#,Mono,Cross Platform,我希望为linux/windows/mac/任何其他平台编写一些C#代码,并寻找可移植代码的最佳实践 这个项目有很多资源 便携式C#的最佳实践是什么?不要将Windows.Forms用于GUI,但Mono可能已经提到了这一点。Gtk对于跨平台GUI来说更加一致和可靠。如果您希望代码可移植,您需要仔细查看Mono站点上已完成的功能列表。它们详细介绍了框架中的每个类以及完整性级别。在设计过程中,您必须考虑到这些因素,以免走得太远,发现关键功能尚未实现。我实际上使用过winforms,这很好。虽然很难
便携式C#的最佳实践是什么?不要将Windows.Forms用于GUI,但Mono可能已经提到了这一点。Gtk对于跨平台GUI来说更加一致和可靠。如果您希望代码可移植,您需要仔细查看Mono站点上已完成的功能列表。它们详细介绍了框架中的每个类以及完整性级别。在设计过程中,您必须考虑到这些因素,以免走得太远,发现关键功能尚未实现。我实际上使用过winforms,这很好。虽然很难看,但还是奏效了 显然,不要使用p/Invoke或任何win32之类的东西,比如注册表。还要注意任何第三方DLL。例如,我们使用一个第三方SQLite DLL,它实际上包含了本机代码,如果我们想在OXX/Linux上运行,我们必须交换它。 < P>我讨厌“最佳实践”一词,因为似乎有些实践在任何上下文中都是最好的,这是一个冒险的事情,但我将告诉大家我认为多平台代码是一个“好的实践”。(对于大多数其他类型的开发): 使用持续集成引擎,始终为所有目标平台构建
听起来太复杂了?好吧,如果你真的需要支持多个平台,那么最好这样做。无论你对代码和库的使用有多么谨慎,如果测试太晚,你会发现自己花了很长的时间来修改应用程序的大部分。几年前,我会建议你给自己买一份我的跨平台计划NET,但由于这本书有些过时,现在你真的需要坚持使用Mono站点的信息 该工具非常适合分析现有的.NET应用程序,并警告您可移植性问题,但新代码的最佳选择是在开发工作中使用最新稳定版本的Mono 正如Orion所说,在使用第三方DLL时需要小心,尽管我的合著者编写了一个工具来分析DLL的p/Invoke依赖项,如果您确实想快速检查第三方软件的话
如果您决定在MS.NET上开发,那么您应该尝试并确保您也在Mono上进行构建和单元测试,并且您还应该注意一些特定于Windows的名称空间,例如Microsoft.Win32和System.Management名称空间。还有一些其他简单的事情。例如不要假定路径字符。或者 我是在Linux或OSX上定期在Mono上编译NUnit的人之一 另外,不要假设编译器的工作方式完全相同。我们最近发现了一个问题,即MS C#编译器似乎包含了Mono编译器没有包含的内容,需要在构建脚本中额外引用
除此之外,它非常简单。我记得我们第一次看到它时,它非常令人兴奋(即使它很难看)注意与文件名和路径操作有关的任何事情,并利用ie中的可移植.NET方法 而不是:
string myfile = somepath + "\\file.txt";
做:
如果需要指定路径分隔符,则应使用路径分隔符。分隔符etc不要将“\r\n”用于新行。请使用环境。新行
记住:
- *NIX仅使用换行符(“\n”)
- Windows使用“\r\n”
- MacIntosh使用“\r”(我对此不太确定-请随意更正)
L.E.:似乎一些较新的MacOS不再使用“\r”行分隔符。缺少一项:确保文件名区分大小写。file.Open(“MyFile.txt”);如果您的文件名为myfile.txt,则无法在Unix上运行。Macintosh过去使用过\r。现在它使用了\n,这要归功于BSD基础。不确定它是何时更改的。但这可能仍然是一个问题。宪兵和MoMA也可以提供帮助。
string myfile = Path.Combine(somepath, "file.txt");