.net - 为 .NET 跨平台开发组织 Visual Studio 项目和代码的行业标准方法是什么

标签 .net visual-studio mono cross-platform projects-and-solutions

我在 Visual Studio 中有一个相当大的 C# 项目解决方案。我想将其中一些项目移植到 MONO 中并在 MAC 上运行。当然有些东西不起作用,有些东西我不想移植,因为它们不适用于 MAC。

一种方法是解决方案和项目配置。这使我可以排除我不想构建的项目(不幸的是,Visual Studio 并没有让它很容易看到,但无论如何......)。

第二种可以与第一种协同工作的方法是使用预编译器指令,例如#if MONO,然后在那时做一些事情。这很好,但它会创建同一个程序集的多个版本。编译后如何区分两者?这是一个问题吗?

即使前两种方法有效,有时我也想要一个大型项目的一部分。我不想浏览 20 个左右的文件并输入 #if MONO 吗?我可以手动劫持项目文件,但在 Visual Studio 中没有任何可见性。除非他们卸载项目并打开 XML 并查看一下,否则团队中的任何其他人都无法知道发生了什么。这听起来很疯狂。更糟糕的是,有时项目引用了一些东西,我想排除 MONO 的引用。现在我必须编辑 csproj。

我可以拆分项目,但是如果在某个时候我想移植到另一个平台怎么办。哪个平台需要什么代码的交叉点会变得疯狂。更糟糕的是,我可以让项目引用这个大型项目,然后可能不得不拆分。这一切都有效,但它会导致项目重载,不是吗?

我找不到一个好的清洁解决方案。有小费吗?有没有我可以遵循的标准。如果 VS 对 csproj 文件的编辑有更多的可见性,这可能会起作用。

最佳答案

您还可以设置文件夹结构并将您的解决方案拆分为包含平台独立项目的通用解决方案和包含平台特定项目的平台特定解决方案。

因此,例如一个包含所有常见项目的 application.sln,为了论证,我们还有一个 iOS 和 Android 解决方案。

  • 根文件夹
  • 应用程序(文件夹)
  • application.Droid(文件夹)
  • 应用程序.Ios(文件夹)
  • 应用程序.sln
  • 应用程序.Droid.sln
  • 应用程序.Ios.sln

  • 在特定于平台的解决方案中,您可以通过向特定于平台的项目添加例如带有额外公共(public)项目子文件夹的“[应用程序]”文件夹来引用公共(public)项目。依次添加所有需要的公共(public)文件作为链接。

    上面的答案是您还可以的可能性之一:
  • 创建一个可移植的类库,您可以在特定平台的项目中共享它
  • 使用 MvvmCross (MvvmCross GitHub),这样你就有了一个核心项目,你可以在你的平台特定项目中引用它
  • 关于.net - 为 .NET 跨平台开发组织 Visual Studio 项目和代码的行业标准方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16992872/

    相关文章:

    c# - 从 MVC Web 应用程序打印到热敏打印机

    c# - 什么是最有效的时间测量方法?

    c# - Unity 中的 Mono 与 .NET

    c++ - 程序将无法在 Visual Studio 之外正常运行

    对命令提示符、Visual Studio exe 和文本文件感到困惑?

    c# - 获取 .NET 对象的内存地址 (C#)

    c# - 使用 Mono : Can't connect to my sqlite database 的 Linq to SQL

    c# - 向现有 Web 服务自定义类型添加新字段

    .net - 为什么 "Non"中的 "ExecuteNonQuery"?

    asp.net - 在 w3wp 进程之间共享程序集以减少内存使用