如何组织面向多个平台构建的类库项目的源代码

本文关键字:构建 类库 项目 源代码 平台 何组织 | 更新日期: 2023-09-27 17:50:48

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

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

我有两个问题:

  1. 每个新文件必须添加到每个项目,否则它不会中定义的每个类都无法访问特定的平台。正如你所意识到的,这很容易被忘记。有什么方法可以避免这种文件跟踪吗?有可能吗?自动化吗?
  2. 我如何改善整个基础设施?你在你的项目中使用了什么方法和/或解决方案?

如何组织面向多个平台构建的类库项目的源代码

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

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

我之前做过几次,这是我使用的方法,允许在野田时间内构建PCL。我最终得到了6种配置:

  • 调试PCL
  • 发布
  • 释放PCL
  • 签署发布
  • 签字放行PCL

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

另一种选择是为每个平台拥有一个"骨架"项目文件,和一个单独的"主"项目文件,并为除了主之外的所有平台生成真正的项目文件。因此,您将在主项目文件中添加一个新的源文件引用,然后重新生成所有其他源文件。请注意,这确实意味着要编写这样的代码……或者使用我们用于protobuf-csharp-port的项目:csprojectprojector

另一种方法是使用通配符而不是在项目中包含单个文件。这也需要手工编辑项目文件,但这是一次性的任务。我从未使用过这种方法,但我看到别人提到过。

http://msdn.microsoft.com/en-us/library/ms171454 (v = vs.100) . aspx