Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 便携式C语言的最佳实践#_C#_Mono_Cross Platform - Fatal编程技术网

C# 便携式C语言的最佳实践#

C# 便携式C语言的最佳实践#,c#,mono,cross-platform,C#,Mono,Cross Platform,我希望为linux/windows/mac/任何其他平台编写一些C#代码,并寻找可移植代码的最佳实践 这个项目有很多资源 便携式C#的最佳实践是什么?不要将Windows.Forms用于GUI,但Mono可能已经提到了这一点。Gtk对于跨平台GUI来说更加一致和可靠。如果您希望代码可移植,您需要仔细查看Mono站点上已完成的功能列表。它们详细介绍了框架中的每个类以及完整性级别。在设计过程中,您必须考虑到这些因素,以免走得太远,发现关键功能尚未实现。我实际上使用过winforms,这很好。虽然很难

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

这个项目有很多资源


便携式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");