2015-06-08 21 views
1

我正在寻找在多平台上运行的可移植C#项目的最佳做法。在我的情况下,我有不同的包装DLL为每个平台提供接口/类,等等,而你在每个平台上是相同的,我仍然需要在每个平台上引用相应的DLL。这种情况下的最佳做法是什么?使用本机dll时跨平台单声道项目布局的最佳做法

我可以在C#项目文件中使用条件引用(使用描述的技术here)。然后我需要知道我是否在Linux,Windows或OS X上。我该怎么做?

另一种选择是为每个平台创建一个单独的项目。但后来我有代码冗余,因为我必须为每个平台实现每个接口/继承。虽然实现是相同的,但它们来自不同类型的事实上的不同类型(尽管它们在使用时是相同的)。

在这种情况下有什么可能的策略,有哪些优点或缺点?

回答

1

我以前做过类似的事情。我不知道是否应该考虑我的方式作为最佳做法,但它对我有效:

我确实选择了“每个平台的单独项目”方法(目前仅适用于MS-.net和MonoDroid) ),但是只需将两个.csproj文件放在同一个文件夹中即可解决代码重复问题。然后我将第一个项目中使用的代码文件添加到第二个项目中。

我通过插入条件,随后将其添加到相应的csproj中,来提示我的代码依赖关系中的任何不一致。

这种方法唯一值得注意的缺点是,如果在第二个项目中重新打开一个文件(通过在项目浏览器中双击),该文件已经通过第一个项目打开(这意味着被添加到相同的解决方案,就像我一样)。但是这些通知似乎没有任何伤害,我能够愉快地代码消失。

Imho这种轻微的烦恼比两个地方使用相同的代码造成的麻烦要好得多。也许这可以通过将代码放在适当的源代码控制系统(如Git)中(例如在两个不同的分支上)来缓解,但由于multi-csproj方法对我来说工作得很好,所以我没有尝试任何方法。