4

我们有两个用于测试和生产的代码库。这两个代码库之间的唯一区别在于两个文件:

  • 配置文件
  • 构建文件 (.csproj)

维护两个分支是一项相当大的工作,可以通过将代码库合并为一个并使用持续集成(例如 Hudson,例如)根据目标环境修改文件来消除。

从 VS2010 开始,配置文件有一个非常智能的解决方案,它允许我们为两个构建配置“Release-Test”和“Release-Prod”定义不同的配置文件转换。

但是,我们有一些差异反映在项目文件 (.csproj) 中,例如:

  • 生成的程序集的名称:Foo.exe 与 Foo-Test.exe。
  • 汇编版本。
  • ClickOnce 部署设置。

有没有什么聪明的方法可以根据构建配置转换 csproj 文件,或者如何将这些设置提取到配置文件或 C# 代码中?

更新:

我尝试按照@JaredPar 的建议在 csproj 文件中使用条件 MSBuild 属性,但它有一些注意事项(有关详细信息,请参阅我的评论)。还有其他方法可以实现这一目标吗?

4

1 回答 1

2

听起来您想使用单个csproj控件元素,例如基于特定构建配置的程序集名称。如果是这样,那么您正在寻找ConditionalMSBuild 属性上的元素

<AssemblyName Condition="'$(Configuration)' == 'Release-Prod'">Foo</AssemblyName>
<AssemblyName Condition="'$(Configuration)' == 'Release-Test'">Foo-Test</AssemblyName>
于 2012-03-27T14:35:09.820 回答