1

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

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

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

更新2: 正如我之前所说,使用添加为链接功能来实现如下所示的结果:为旧的(3.5)框架创建一个新项目。将所有文件添加为顶级版本项目的链接。在 v4.0 项目中,通过partial class诸如ClassName.Net40.cs. 对我来说很好。

4

2 回答 2

1

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

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

于 2011-06-20T04:05:34.727 回答
0

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

#如果

一种方法是为 .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章。)

于 2011-06-20T14:26:54.123 回答