2008-09-03 82 views
20

我期待为Linux/windows/mac /任何其他平台编写一些C#代码,并且正在寻找可移植代码的最佳实践。便携式C#的最佳实践

项目mono有一些很棒的porting资源。

便携式C#的最佳实践是什么?

回答

14

我实际上使用winforms,它很好。这是巴特丑,但它的工作。

显然,不要使用P/Invoke,或者任何类似注册表的win32东西。也要注意任何第三方DLL。例如,我们使用第三方SQLite dll,它实际上包含本机代码,如果我们想在OSX/linux上运行,那么我们必须交换。

+2

宪兵和现代艺术博物馆也可以提供帮助。 – user7116 2009-02-03 17:36:56

6

不要使用Windows.Forms的图形用户界面,但单声道可能已经提到过。跨平台GUI的Gtk#更加一致和可靠。

2

如果您希望代码是可移植的,则需要仔细查看Mono网站上已完成功能的列表。他们详细讨论框架中的每个类,以及完整性的级别。在设计过程中,您必须考虑到这些因素,以便您不会走得太远,发现一个关键功能尚未实现。

15

我讨厌“最佳实践”一词,因为它似乎有些实践在任何情况下都是最好的,这是一件有风险的事情,但我会告诉我认为多平台代码的“良好实践” (以及大多数其他类型的开发):

使用持续集成引擎和始终为所有目标平台构建

声音太复杂?那么,如果你真的需要支持多个平台,最好做到这一点。无论你对代码和库的使用情况多么谨慎,如果你测试得太晚,你会发现自己花费大量的时间来重新修改应用程序的大部分内容。

3

几年前,我会建议你在跨平台的.NET上为自己买一本我的book的副本,但是由于本书已经过时了,现在你确实需要坚持单声道的信息现场。

Mono Migration Analyzer (MoMA)工具对分析现有的.NET应用程序非常有用,并警告您可移植性问题,但新代码最好的选择是使用最新的Mono稳定版本进行开发工作。

由于Orion表示在使用第三方DLL时需要小心,尽管如果您想快速检查第三方软件,我的共同作者编写了NativeProbe工具来分析P/Invoke依赖关系的DLL。

如果您决定在MS .NET上开发,那么您应该尝试并确保您也在Mono上构建和单元测试,并且还应该注意许多Windows特定的命名空间,例如Microsoft.Win32和System 。管理命名空间。

1

还有其他一些简单的事情。像不要假设路径字符。或者newlines

我是定期在Linux或OSX上编写Mono的NUnit的人之一。

另外,不要认为编译器的工作原理完全相同。我们最近发现一个问题,MS C#编译器似乎包含Mono的编译器没有的东西,因此在构建脚本中需要额外的引用。

除此之外,它非常简单。我还记得我们第一次拿到the GUI running on Mono/Linux - 这很令人兴奋(即使它很丑)

11

留意任何与文件名和路径的操作和使用的便携式.NET方法System.IO.Path即。而不是

string myfile = somepath + "\\file.txt"; 

做:

string myfile = Path.Combine(somepath, "file.txt"); 

如果需要指定路径分隔符,那么你会使用Path.Separator

10

不要使用“ \ r \ n“换一个新行。使用Environment.NewLine

记住:

  • * NIX只使用换行符( “\ n”)
  • Windows使用 “\ r \ n”
  • Macintosh使用“\ r “(我对此不太确定 - 随时纠正我)。

L.E .:似乎一些较新的MacOS不再使用“\ r”行分隔符。

+0

Macintosh用于\ r。现在它使用\ n,这要归功于BSD基础。不确定它何时改变。尽管如此,它仍然是一个问题。 – 2009-02-03 01:53:23

1

一个缺失的项目:确保文件名区分大小写。 File.Open(“MyFile.txt”);如果你的文件被命名为myfile.txt,那么你不会在Unix上工作。