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

时间:2012-07-23 20:14:59

标签: c# visual-studio-2010 visual-studio build-process

我需要在我的应用程序中创建一些核心库,这些库将在.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种不同的构建配置来解决问题?

2 个答案:

答案 0 :(得分:7)

我的工作是:

  • 有一个“常规”csproj,我用于我的大多数开发,添加文件等 - 但记住真的所有文件都在“in”
  • 对于其他csproj,请使用类似:

    <ItemGroup>
      <Compile Include="..\Foo\**\*.cs" />
    </ItemGroup>
    

(这与“添加为链接”基本相同,但不需要在每个文件的基础上完成)

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


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

答案 1 :(得分:0)

我对跨平台项目的处理方法是使用不同的slns,每个slns用于一个平台。

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

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

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

这对我很有用,YMMV。希望这会有所帮助。