使用原生dll

时间:2015-06-08 09:36:24

标签: c# .net dll mono cross-platform

我正在寻找在多平台上运行的便携式C#项目的最佳实践。在我的情况下,我为每个提供接口/类等的平台提供了不同的包装器dll。而在每个平台上你都是相同的,我仍然需要在每个平台上引用相应的dll。在这种情况下,最佳做法是什么?

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

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

在这种情况下有哪些可能的策略以及有哪些优点或缺点?

1 个答案:

答案 0 :(得分:1)

前段时间我做过类似的事情。我不知道是否应该考虑我的方式作为最佳实践,但它对我有用:

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

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

这个approch唯一值得注意的缺点是,如果在第二个项目中重新打开一个文件(通过双击项目浏览器),那么会经常收到来自Visual Studio的投诉,该文件已经通过第一个项目打开(暗示两者都是像我一样添加到同一个解决方案中)。但这些通知似乎没有任何损害,我能够愉快地编写代码。

Imho这种轻微的烦恼比在两个地方拥有相同代码的麻烦更可取。也许这可以通过将代码保存在像Git这样的适当源代码控制系统中来缓解(例如在两个不同的分支上),但由于multi-csproj方法对我来说效果很好,所以我没有在该路径上尝试任何东西。