【问题标题】:Targeting multiple frameworks, how to implement?针对多个框架,如何实现?
【发布时间】:2011-06-20 03:54:17
【问题描述】:

我在 Mercurial rep 中有一个 c# 库(在 VS2010 中开发),目前针对 netFX-3.5。我想在我的库中使用 netFX-4.0 中的一些功能,但由于有很多项目仅限于 2.0 CLR,我还想保留和维护 netFX-3.5 版本。自然会有一些代码(甚至可能是大部分代码)在两个版本中都是相同的。现在我很困惑,这是保持这一点的最佳(或至少是好的)方法。

我应该在 VS 中创建一个单独的项目吗?或者也许创建存储库的克隆?是否有一些行之有效的策略?

更新: 我发现了 VS Add as Link 功能,它允许在项目之间共享文件,这对于在同一个解决方案中将两个目标作为两个项目实现是一个巨大的优势。我很确定我会采用这个解决方案,但如果有更多建议,那就太好了!

更新 2: 正如我之前所说,使用 Add as link 功能来实现如下所示的预期结果:为旧 (3.5) 框架创建一个新项目。将所有文件添加为顶级版本项目的链接。在 v4.0 项目中,通过 partial class 规范(如 ClassName.Net40.cs)将 netFX-4.0 功能添加到类中。适合我。

【问题讨论】:

  • 为什么不能只在类库中拥有通用代码?
  • 我认为这是不可能的。我需要访问在类库中无法访问的私有字段和方法。无论如何,这对我来说似乎是一种尴尬的解决方案。
  • 您需要访问私有字段是什么意思?您不能从不同的目标框架访问私有字段,因为您只能访问一个类中的私有字段
  • 没错。现在,我实际上如何才能使用您的方法(在类库中有公共代码)隔离,例如,在 netFX-3.5 和 netFX-4.0 版本中会有所不同的类的某些方法?
  • 你会使用部分类

标签: .net visual-studio mercurial project-management project-organization


【解决方案1】:

通常人们通过 MSBUID 目标来实现,然而,微软最近发布了一些非常酷的“便携式库工具”Visual Studio 扩展,它添加了一个非常类似于类库的新项目类型,但已经具备支持多个框架的基础架构,甚至包括 Silverlight、WP7。

查看http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/

【讨论】:

  • 便携式库工具目前看来是一个非常不可靠的解决方案,但感谢您的提示。
【解决方案2】:

我不知道有什么经过验证的策略,因为这真的取决于会有什么不同以及如何不同。在不知道具体情况的情况下,我可以提供一些可能会有所帮助的想法。

#如果

一种方法是为 .NET 3.5 和 .NET 4.0 创建单独的构建配置,以便您可以在每个构建配置中指定单独的条件编译符号,并在某些地方执行类似的操作:

#if NET40
    // something specific to .NET 4.0
#else
    // version for .NET 3.5
#endif

构建配置可以轻松地从一种切换到另一种并一次构建所有配置。然而,它们主要对代码有帮助。

MQ

我为一个项目执行此操作的方式(有一段时间,我需要一个 .NET 3.5 版本的 Caliburn.Micro)是使用 Mercurial Queues 有一个补丁,我可以将其应用于存储库以“降级”事物。使用 MQ 是解决方案的必要部分,因为我仍然需要能够更新我的 CM 存储库克隆并重新应用我的更改。

条件编译在这里帮不上忙的另一个原因是 CM 对 Blend SDK 交互程序集的引用需要更改为以前的版本,而我不知道如何在项目文件中进行条件引用。

(如果您之前没有使用过 MQ:MqTutorial,以及 Mercurial: The Definitive Guide 的章节 1213。)

【讨论】:

  • 我接受这个作为答案,因为它显示了迄今为止最大的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2016-05-18
  • 2010-09-07
相关资源
最近更新 更多