【问题标题】:Best practice for cross-platform mono project layout when using native dll's使用本机 dll 时跨平台单声道项目布局的最佳实践
【发布时间】:2015-08-22 17:10:01
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    我通过插入条件来绕过代码依赖项中的任何不一致之处,随后我将其添加到相应的 csproj 中。

    这种方法唯一值得注意的缺点是,如果在第二个项目中重新打开一个文件(通过在项目资源管理器中双击),该文件已经通过第一个项目打开(暗示两者都是像我一样添加到相同的解决方案中)。但是这些通知似乎并没有什么坏处,我可以愉快地编写代码了。

    恕我直言,这种轻微的烦恼比在两个地方使用相同代码所带来的麻烦更可取。也许可以通过将代码放在一个适当的源代码控制系统(例如 Git)中(例如在两个不同的分支上)来缓解这种情况,但是由于多 csproj 方法对我来说效果很好,所以我没有尝试沿着这条路线做任何事情。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多