3

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

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

这是我有两个问题:

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

2 回答 2

5

为此,我将使用几个单独的 Visual Studio 项目,每个项目用于自己的平台。

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

我之前做过几次,这是我用来允许在Noda Time中构建 PCL 的方法。我最终得到了 6 种配置:

  • 调试
  • 调试 PCL
  • 释放
  • 发布 PCL
  • 签名发布
  • 签名发布 PCL

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

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

于 2013-01-06T21:42:51.403 回答
1

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

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

于 2013-01-14T06:11:24.877 回答