4

我需要在我的应用程序中创建一些在 .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 种不同的构建配置?

4

2 回答 2

7

我要做的是:

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

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

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

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


如果您尝试针对多个框架(而不是多个版本),那么另一个选项可能是:使用Portable Class Library。这是一个适用于多个框架的单个项目,仅限于您所针对的平台的功能的严格交叉。在 VS2010 中这是一个附加功能;它默认包含在 VS 11 中。

于 2012-07-23T20:40:43.203 回答
0

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

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

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

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

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

于 2012-07-23T20:42:10.943 回答