我需要在我的应用程序中创建一些核心库,这些库将在.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种不同的构建配置来解决问题?
答案 0 :(得分:7)
我的工作是:
对于其他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。希望这会有所帮助。