【发布时间】:2013-04-10 08:42:48
【问题描述】:
我们有一个 VS2012 .NET 4 产品,它有 2 个不同的 SKU 的 A 和 B,我们目前只为 x86 构建。
我们也有常用的配置Debug 和Release,这意味着我们目前有 4 种配置。
- 调试A
- 调试B
- ReleaseA
- 版本B
查看其中一个 .csproj 文件,它看起来像这样
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugA|x86' ">
<OutputPath>..\bin\DebugA\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseA|x86' ">
<OutputPath>..\bin\ReleaseA\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugB|x86' ">
<OutputPath>..\bin\DebugB\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseB|x86' ">
<OutputPath>..\bin\ReleaseB\</OutputPath>
</PropertyGroup>
显然,添加 x64 会使这从 4 到 8 种不同的组合翻倍,而且 VS 似乎也可以随时添加 AnyCPU 平台配置。确保 30 多个项目中所有 8 个都正确配置需要在 VS 中大量点击,而且很容易出错。
我已经阅读了其他一些解决多目标问题的 SO 问题,以及在参考路径中使用 ${Platform} 为涉及的不同平台包含不同参考的建议之一。我想我可以为我的项目配置做类似的事情,所以我在尝试做多平台时尝试了这个:
<PropertyGroup Condition=" '$(Configuration)' == 'DebugA' Or '$(Configuration)' == 'DebugB' ">
<OutputPath>..\bin\${Platform}\${Configuration}\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'ReleaseA' Or '$(Configuration)' == 'ReleaseB' ">
<OutputPath>..\bin\${Platform}\${Configuration}\</OutputPath>
</PropertyGroup>
理论上,这应该可以满足我对所有 8 种不同组合的需求,只需两个块。但是现在查看 VS,我看不到 neitehr x86 或 x64 作为该项目的可用构建平台。看起来 VS 实际存储构建平台的唯一方法是将它们编码为属性组上的异常条件?这么说吧……
有没有办法制作一个“漂亮”的多平台 .csproj 以与 VS 一起工作?
我是否可以创建 .csprojs 然后决定不在 VS 中编辑它们,相信 msbuild 将使用正确的平台,即使 VS 无法在单个项目的属性窗口中显示任何平台?
编辑:
似乎这个问题有点混乱:明确地说,我想知道如何设置,维护和概述项目的配置,以及我的解决方案的构建配置,当有很多项目和八种组合时配置|平台。我知道如何手动执行此操作,但在 200 多个属性页面中的一个页面上我会失去理智或犯错误。
【问题讨论】:
-
我认为您需要从“设置、维护和概述”中阐明您想要什么以及您今天发现的挑战。
-
在一个慢速加载对话框页面上设置(config,platform,project)的一种组合的属性。由于这通常是一个包含 100 多种组合的矩阵,因此这很乏味且容易出错。我需要查看一个矩阵中的所有配置才能有效地维护它,或者我需要一种方法来使用示例中的变量来限制配置的组合数量。
标签: c# visual-studio msbuild