【发布时间】:2014-12-12 18:51:54
【问题描述】:
我们有一个大型 C# 程序,分为 2 个主要组:内核库和(客户)特定应用程序和服务。
我们的 TFS 结构(简化)是这样的:
内核
- DLVP
- 发布 1
- 第 2 版
- 第 3 版
- ...
客户A
- DLVP
- 发布
客户B
- DLVP
- 发布
我们使用 nugets 来编译和分发我们的内核代码,并将其包含到客户应用程序中。所以我们可以很容易地转移到一个新的版本/发行版。然而,我们并不满足于只有 dll。我们希望在任何地方都能获得完整的调试和编辑体验。
您可以在客户解决方案中包含内核项目,但它们会引用 Release X,因此如果我们想要迁移到新版本,我们必须为每个客户更改每个解决方案和项目文件,这是一个很多(N 个客户 x M 服务/程序 = 很多)
我读到您可以使用环境变量来更改 .sln 和 .csproj 文件中的某些值,但我们希望有一些对所有开发人员来说更可控的东西。我更喜欢引用一个也可以存储在 TFS 中的共享变量。
我制作了一个小的 .sln 文件来澄清一下:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{B6B9AE41-99ED-47CE-B35C-F693C5F5F736}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibKernel", "..\..\Release 1\LibKernel\LibKernel\LibKernel.csproj", "{439BD82B-340D-4D69-B367-E52E0DF27983}"
EndProject
我想改变这部分:
"LibKernel", "....\ 第 1 版 \LibKernel\LibKernel\LibKernel.csproj", "{439B....}"
进入
"LibKernel", "....\ {CustomerA.CurrentRelease} \LibKernel\LibKernel\LibKernel.csproj", "{439B....}"
类似的东西(也适用于 .csproj 文件),但如果它们是更好的方法,我很高兴听到它们。
非常感谢
【问题讨论】:
标签: c# visual-studio versioning solution csproj