使用本机dll's时跨平台单项目布局的最佳实践

本文关键字:项目 布局 最佳 单项目 跨平台 dll 本机 | 更新日期: 2023-09-27 17:54:21

我正在寻找在多个平台上运行的可移植c#项目的最佳实践。在我的情况下,我有不同的包装器dll的每个平台提供接口/类等。虽然它们在每个平台上都是相同的,但我仍然需要在每个平台上引用相应的dll。这种情况下的最佳实践是什么?

我可以在c#项目文件中使用条件引用(使用这里描述的技术)。然后我需要知道我是在Linux, Windows还是OS x上。我该怎么做呢?

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

在这种情况下可能的策略是什么?优势或劣势是什么?

使用本机dll's时跨平台单项目布局的最佳实践

我以前也做过类似的事情。我不知道是否应该将我的方法视为最佳实践,但它对我很有效:

我确实选择了"每个平台单独的项目"的方法(目前只有MS- net和MonoDroid对我来说),但通过简单地把两个。csproj文件放在同一个文件夹中来解决代码重复问题。然后我将第一个项目中使用的代码文件添加到第二个项目中。

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

这种方法唯一值得注意的缺点是,如果在第二个项目中重新打开文件(通过在项目资源管理器中双击),Visual Studio经常会抱怨,这个文件已经通过第一个项目打开了(这意味着两者都被添加到相同的解决方案中,就像我所做的那样)。但是这些通知似乎没有害处,我可以愉快地编写代码。

在我看来,比起在两个地方有相同的代码所带来的麻烦,这种轻微的烦恼是可取的。也许这可以通过将代码放在一个适当的源代码控制系统(如Git)中来缓解(例如在两个不同的分支上),但是由于multi-csproj方法对我来说工作得很好,所以我没有尝试过这条路线。