使项目在多个.NET版本之间保持同步

我需要在我的应用程序中创建一些核心库,这些库将在.NET 3.5和.NET 4.0中都可用。 我很高兴创建多个项目,创建所需的定义并使用#ifdef来控制哪些代码使其成为哪个输出程序集。

但是,我想知道的是,是否有办法让这些项目保持同步? 当我在XNA下开发时,我有一个Windows构建和Windows Phone构建 – 并且XNA将一个属性注入到名为XnaCrossPlatformGroupID的项目文件中。 它的作用是使Visual Studio能够自动确保在将文件添加到项目时将其添加到相应的项目中。 因此,例如,如果我将名为Foo.cs的文件添加到项目的Windows副本中,则该相同文件将添加到项目的Windows Phone副本中。

有没有办法在Visual Studio中为一组正常的项目复制那种行为? 我不想使用构建配置,因为我希望能够在一个步骤中编译所有目标平台,而无需借助IDE之外的工具(例如TeamCity之类的东西)。 或者是否有另一种方法允许针对多个目标构建项目,而无需使用20种不同的构建配置来解决问题?

我所做的是:

  • 有一个“常规”csproj我用于我的大多数开发,添加文件等 – 但记住,所有文件都是“在”
  • 对于其他csproj,请使用以下内容:

        

(这与“添加为链接”基本相同,但无需基于每个文件完成)

这是所有* .cs文件的递归包含,所以一切都在。不需要文件维护。


如果您尝试定位多个框架 (而不是多个版本 ),则另一个选项可能是:使用可移植类库 。 这是一个适用于多个框架的单个项目, 仅限于您所定位的平台的严格function交集。 在VS2010中,这是一个插件function; 它默认包含在VS 11中。

我对我的跨平台项目所做的是拥有不同的slns,每个slns用于一个平台。

共享代码位于一个公共位置,并作为链接添加到正确的csproj中。 此csproj还包含任何特定于平台的文件。 如果“公共代码”文件需要基于当前平台是有条件的,您可以选择将其替换为两个特定于平台的文件或在其中放入#ifdef(取决于它有多少不同)。

请注意,您还可以在Visual Studio中向另一个添加一个解决方案。 这种“组合”解决方案可用于所有平台的自动构建。

示例: https : //github.com/ananthonline/graffiti

对我来说这很有用,YMMV。 希望这可以帮助。