我在Mercurial rep中有一个c#库(在VS2010中开发),目前以netFX-3.5为目标。我想在我的库中使用netFX-4.0中的一些功能,但由于有很多项目限于2.0 CLR,我还想保留和维护netFX-3.5版本。当然会有一些代码(甚至可能是大多数代码)在两个版本中都是相同的。现在我很困惑,这是维持这一点的最好(或至少是好的)方式。
我应该在VS中创建一个单独的项目吗?或者可能创建一个存储库的克隆?是否有一些经过验证的策略?
更新 我找到了VS Add as Link功能,它允许在项目之间共享文件,这对于在同一解决方案中将两个目标实现为两个项目是一个巨大的优势。我很确定我会选择这个解决方案,但如果有更多的建议,那就太棒了!
UPDATE2:
正如我之前所说,使用添加为链接功能来实现所需的结果,如下所示:为旧(3.5)框架创建一个新项目。将所有文件添加为顶级版本项目的链接。在v4.0项目中,通过partial class
规范(如ClassName.Net40.cs
)将netFX-4.0功能添加到类中。对我来说很好。
答案 0 :(得分:1)
通常人们通过MSBUID目标来实现,但是,微软最近发布了一些非常酷的“可移植库工具”Visual Studio扩展,它增加了一个与类库非常相似的新项目类型,但已经有了支持多个框架的基础设施,甚至包括Silverlight,WP7。
检查http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/
答案 1 :(得分:0)
我不知道任何经证实的策略,因为它实际上取决于将会有什么不同以及如何。如果不具体了解,我可以提供一些可能有用的想法。
一种方法是为.NET 3.5和.NET 4.0创建单独的构建配置,以便您可以在每个构建配置中指定单独的条件编译符号,并在某些位置执行以下操作:
#if NET40
// something specific to .NET 4.0
#else
// version for .NET 3.5
#endif
构建配置可以轻松地从一个切换到另一个并立即构建所有这些配置。但是,它们主要是对代码有帮助。
我为一个项目做了这个(有一段时间,我需要一个.NET 3.5版本的Caliburn.Micro)的方式是使用Mercurial Queues来获得一个可以在存储库中应用“降级”内容的补丁。使用MQ是解决方案的必要部分,因为我仍然需要能够更新CM存储库的克隆并重新应用我的更改。
条件编译无法帮助我的另一个原因是CM对Blend SDK Interactivity程序集的引用需要更改为以前的版本,而且我不知道如何在项目文件中执行条件引用。
(如果您之前没有使用过MQ:MqTutorial,以及Mercurial:The Definitive Guide的章节12和13。)