回答
我实际上使用winforms,它很好。这是巴特丑,但它的工作。
显然,不要使用P/Invoke,或者任何类似注册表的win32东西。也要注意任何第三方DLL。例如,我们使用第三方SQLite dll,它实际上包含本机代码,如果我们想在OSX/linux上运行,那么我们必须交换。
不要使用Windows.Forms的图形用户界面,但单声道可能已经提到过。跨平台GUI的Gtk#更加一致和可靠。
如果您希望代码是可移植的,则需要仔细查看Mono网站上已完成功能的列表。他们详细讨论框架中的每个类,以及完整性的级别。在设计过程中,您必须考虑到这些因素,以便您不会走得太远,发现一个关键功能尚未实现。
我讨厌“最佳实践”一词,因为它似乎有些实践在任何情况下都是最好的,这是一件有风险的事情,但我会告诉我认为多平台代码的“良好实践” (以及大多数其他类型的开发):
使用持续集成引擎和始终为所有目标平台构建。
声音太复杂?那么,如果你真的需要支持多个平台,最好做到这一点。无论你对代码和库的使用情况多么谨慎,如果你测试得太晚,你会发现自己花费大量的时间来重新修改应用程序的大部分内容。
几年前,我会建议你在跨平台的.NET上为自己买一本我的book的副本,但是由于本书已经过时了,现在你确实需要坚持单声道的信息现场。
Mono Migration Analyzer (MoMA)工具对分析现有的.NET应用程序非常有用,并警告您可移植性问题,但新代码最好的选择是使用最新的Mono稳定版本进行开发工作。
由于Orion表示在使用第三方DLL时需要小心,尽管如果您想快速检查第三方软件,我的共同作者编写了NativeProbe工具来分析P/Invoke依赖关系的DLL。
如果您决定在MS .NET上开发,那么您应该尝试并确保您也在Mono上构建和单元测试,并且还应该注意许多Windows特定的命名空间,例如Microsoft.Win32和System 。管理命名空间。
还有其他一些简单的事情。像不要假设路径字符。或者newlines。
我是定期在Linux或OSX上编写Mono的NUnit的人之一。
另外,不要认为编译器的工作原理完全相同。我们最近发现一个问题,MS C#编译器似乎包含Mono的编译器没有的东西,因此在构建脚本中需要额外的引用。
除此之外,它非常简单。我还记得我们第一次拿到the GUI running on Mono/Linux - 这很令人兴奋(即使它为很丑)
留意任何与文件名和路径的操作和使用的便携式.NET方法System.IO.Path即。而不是
:
string myfile = somepath + "\\file.txt";
做:
string myfile = Path.Combine(somepath, "file.txt");
如果需要指定路径分隔符,那么你会使用Path.Separator等
不要使用“ \ r \ n“换一个新行。使用Environment.NewLine
记住:
- * NIX只使用换行符( “\ n”)
- Windows使用 “\ r \ n”
- Macintosh使用“\ r “(我对此不太确定 - 随时纠正我)。
L.E .:似乎一些较新的MacOS不再使用“\ r”行分隔符。
Macintosh用于\ r。现在它使用\ n,这要归功于BSD基础。不确定它何时改变。尽管如此,它仍然是一个问题。 – 2009-02-03 01:53:23
一个缺失的项目:确保文件名区分大小写。 File.Open(“MyFile.txt”);如果你的文件被命名为myfile.txt,那么你不会在Unix上工作。
- 1. 什么是Smalltalk中Symbol使用的“最佳实践”便携式方式?
- 2. 最佳实践 - C#
- 3. C#最佳实践
- 4. Objective-C的最佳实践
- 5. 便携式C#IDE?
- 6. C++组合最佳实践
- 7. 下载最佳实践(C++)
- 8. 最佳实践
- 9. 最佳实践
- 10. 最佳实践
- 11. 最佳实践
- 12. 最佳实践
- 13. 最佳实践
- 14. 最佳实践
- 15. 最佳实践
- 16. 最佳实践
- 17. 最佳实践
- 18. 最佳实践?
- 19. 最佳实践
- 20. 最佳实践
- 21. 最佳实践
- 22. 最佳实践
- 23. 最佳实践
- 24. 最佳实践
- 25. 最佳实践
- 26. 最佳实践
- 27. 最佳实践:
- 28. 最佳实践
- 29. 最佳实践
- 30. C++中的便携式wchar_t
宪兵和现代艺术博物馆也可以提供帮助。 – user7116 2009-02-03 17:36:56