便携式C#的最佳做法

时间:2020-03-05 18:47:18  来源:igfitidea点击:

我正在寻找为linux / windows / mac /任何其他平台编写一些Ccode的方法,并正在寻找可移植代码的最佳实践。

Mono项目有一些很棒的移植资源。

便携式C#的最佳做法是什么?

解决方案

回答

不要将Windows.Forms用于GUI,但是Mono可能已经提到了。对于跨平台的GUI,Gtkis更加一致和可靠。

回答

如果我们希望代码具有可移植性,则需要仔细查看Mono网站上已完成功能的列表。他们详细介绍了框架中的每个类以及完整性级别。在设计过程中,我们将不得不考虑这些因素,以免我们走得太远并且发现尚未实现关键功能。

回答

我实际上使用过winforms,这很好。那是丑陋的,但是奏效了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。-。。。。。。。。。。。。。。-。

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

回答

我讨厌"最佳实践"一词,因为似乎某些实践在任何情况下都可能是最好的,这是一个冒险的事情,但是我将告诉我我认为多平台代码(以及大多数情况下)的"最佳实践"其他类型的开发):

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

听起来太复杂了吗?好吧,如果我们确实需要支持多个平台,那么最好这样做。无论我们对代码和库的使用情况有多谨慎,如果测试太晚,我们都将发现自己花费大量时间来重新编写应用程序的大部分内容。

回答

几年前,我曾建议我们给自己买一本跨平台.NET的书,但是由于该书已经过时,我们现在确实需要坚持Mono网站的信息。

Mono迁移分析器(MoMA)工具非常适合分析现有的.NET应用程序并警告我们可移植性问题,但是新代码的最佳选择是为开发工作使用最新稳定的Mono版本。

正如Orion所说,在使用第三方DLL时需要小心,尽管我的合著者编写了NativeProbe工具来分析DLL的P / Invoke相关性,如果我们确实想快速检查第三方软件的话。

如果确定要在MS .NET上进行开发,则应尝试确保在Mono上进行构建和单元测试,并且还应注意许多Windows特定的命名空间,例如Microsoft.Win32和System.Management命名空间。

回答

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

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

另外,不要假设编译器的工作原理完全相同。我们最近发现了一个问题,MS Ccompiler似乎包含了Mono一个不包含的内容,这需要在我们的构建脚本中进行额外的引用。

除此之外,它非常简单。我记得第一次让GUI在Mono / Linux上运行时,这非常令人兴奋(即使它很丑陋)

回答

注意与文件名和路径操作有关的所有内容,并利用System.IO.Path中的可移植.NET方法。

代替:

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"行分隔符。

回答

缺少的一项:确保文件名区分大小写。 File.Open(" MyFile.txt");如果文件名为myfile.txt,则无法在Unix上使用。