c# - 使用持续集成修改 .NET 项目文件

标签 c# .net continuous-integration app-config config-transformation

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

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

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

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

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

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

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

更新:

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

最佳答案

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

<AssemblyName Condition="'$(Configuration)' == 'Release-Prod'">Foo</AssemblyName>
<AssemblyName Condition="'$(Configuration)' == 'Release-Test'">Foo-Test</AssemblyName>

关于c# - 使用持续集成修改 .NET 项目文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891520/

相关文章:

c# - 如何使用 WinAPI 快速逐像素处理图像?

c# - 在 WCF 服务中使用 NetworkCredential

python - 为什么我的环境变量在 github actions 上等于 None ?

azure-devops - Azure Devops 管道在管道构建中出现 `default literal` 错误

build - 通过HTTP Post-Commit Hook将Github连接到 protected Jenkins

c# - 引用非托管程序集

c# - 当使用 SHCNF_FLUSHNOWAIT 参数调用 SHChangeNotify 时,我可以释放为参数分配的内存吗?

.net core : Why dotnet restore generates a "lock" file,有什么用呢?

c# - HttpResponse 中的 Angular 6 空 header 数组

c# - 在 C# 中多次打开、关闭和处置文件时发生致命执行错误