便携式C#的最佳实践

Ode*_*ded 20 c# mono cross-platform

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

Project mono有一些很棒的移植资源.

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

Mar*_*ias 15

我讨厌术语"最佳实践",因为似乎某些实践在任何环境中都是最好的,这是一个冒险的事情,但我会告诉我我认为多平台代码的"好习惯"(对于大多数人来说)其他类型的发展):

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

听起来太复杂了?好吧,如果你真的需要支持多个平台,那就更好了.无论你对代码和库的使用有多么小心,如果你测试得太晚,你会发现自己花了很多时间来重新处理应用程序的大部分内容.


Ori*_*rds 14

我实际上使用了winforms,它很好.这很糟糕,但它奏效了.

显然,不要使用P/Invoke或任何win32之类的东西,比如注册表.还要注意任何第三方DLL.例如,我们使用第三方SQLite DLL实际上包含本机代码,如果我们想在OSX/linux上运行,我们必须将其替换掉.

  • 宪兵和现代艺术博物馆也可以提供帮助. (2认同)

Sam*_*ick 11

注意与文件名和路径操作有关的任何事情,并使用System.IO.Path中的可移植.NET方法即.

代替:

string myfile = somepath + "\\file.txt";
Run Code Online (Sandbox Code Playgroud)

做:

string myfile = Path.Combine(somepath, "file.txt");
Run Code Online (Sandbox Code Playgroud)

如果需要指定路径分隔符,则可以使用Path.Separator


And*_*nea 10

不要将"\ r \n"用于新行.使用Environment.NewLine

记住:

  • *NIX仅使用换行符("\n")
  • Windows使用"\ r \n"
  • MacIntosh使用"\ r"(我对此并不十分肯定 - 随意纠正我).

LE:似乎一些较新的MacOS不再使用"\ r"行分隔符了.


wvd*_*hel 6

不要在GUI中使用Windows.Forms,但是Mono可能已经提到过了.对于跨平台GUI,Gtk#更加一致和可靠.