如何组织将为多个平台构建的类库项目的源代码?

Igo*_*nko 3 c# projects-and-solutions code-organization visual-studio

我正在开发一个类库项目,它为客户端应用程序提供了许多有用的扩展方法.该项目预计将用于各种平台(.NET框架的版本).

为了做到这一点,我将使用几个单独的Visual Studio项目,每个项目都用于自己的平台.这些项目可能有自己的外部依赖项,但源代码将通过使用"添加作为参考"功能在它们之间共享.这种方法允许我通过在一个文件中编写代码来更改所有项目的实现,而无需将其复制到其他项目.记住目标框架的差异,我需要使用#if编译器指令.每个项目的结果将作为特定版本的.NET框架的NuGet包发布.

这是我有两个问题:

  1. 每个新文件都必须添加到每个项目中,否则将无法编译,并且在某个平台上无法访问其中定义的每个类.你可以意识到这很容易忘记.有没有办法避免这种文件跟踪?有可能实现自动化吗?
  2. 如何改善整个基础设施?您在项目中使用了哪些方法和/或解决方案?

Jon*_*eet 5

为了做到这一点,我将使用几个单独的Visual Studio项目,每个项目都用于自己的平台.

你不需要这样做.您可以为同一个项目提供多个配置.您需要通过编辑项目文件来处理它,但您只需要执行一次(或者至少每次需要添加一个新平台时执行一次).使用在每个项目配置中定义的条件编译符号,允许您在每个构建配置中排除某些位源代码.

我之前做过几次这样的事情,而这正是我用来在Noda Time中进行PCL构建的方法.我最终得到了6种配置:

  • 调试
  • 调试PCL
  • 发布
  • 发布PCL
  • 签署发布
  • 签署发布PCL

显然你的需求可能会有所不同(特别是在签名方面),但它现在对我们来说效果很好 - 而且我认为它比手动保持多个项目文件同步要好得多.

另一种选择是为每个平台提供一个"骨架"项目文件,以及一个"主"项目文件,并为除主人之外的所有人生成真实的项目文件.因此,您需要将新的源文件引用添加到主项目文件中,然后重新生成所有其他文件.这意味着编写代码来做到这一点,请注意......或者使用我们用于protobuf-csharp-port的项目:csprojectprojector