1

我们有一个 C# 桌面应用程序,我们在软件即服务模型上为各种服务器上的客户端运行。我们仍在使用 dot net framework 2。该软件具有一个架构,其中我们有一个独立的应用程序来捕获某些服务器抛出的外部数据。然后是基于它进行计算的应用程序。还有一个客户端可以看到输出的应用程序。3 个应用程序之间的链接是另一个与数据库通信的应用程序。

这 4 个解决方案位于源代码控制的 SVN 上。但是发布管理仍然是手动的,补丁是通过检查日志手动制作的,包括dll、pdb、xml。等代码已更改的项目。

没有实施程序集版本控制,补丁或发布管理只是在黑暗中完成。

我想知道从代码生成自动补丁的行业惯例是什么。我还想要 SVN 中的每个版本的补丁。汇编版本控制对此也有帮助吗?

我读过很多关于持续集成的文章,但它失败了,因为我们没有单元测试和其他花哨的代码来监控代码的正确性。目前我唯一感兴趣的是实现一种制作可以轻松应用和删除的补丁的方法。另外我想知道一种方法来确定我们可以通过某种自动化方式而不是手动维护日志来监控哪个版本处于哪个级别(或应用了哪些补丁)。

4

1 回答 1

0

我们使用一个构建脚本来创建一个SvnVersion.cs包含最后提交的修订的文件。此文件放在解决方案的根目录下,然后添加到解决方案中的所有项目中(但添加为链接,而不是复制)。

文件 ( SvnVersion.Template.cs) 的模板如下所示:

using System.Reflection;
[assembly: AssemblyVersion("1.0.0.$WCREV$")]
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

我们只需使用 TortoiseSVN 在批处理脚本中填充这些占位符:

type "%TRUNKPATH%SvnVersion.Template.cs" > "%TRUNKPATH%\SvnVersion.tmp"
SubWcRev "%TRUNKPATH%\" "%TRUNKPATH%SvnVersion.tmp" "%TRUNKPATH%SvnVersion.cs" -f
IF ERRORLEVEL 1 GOTO ERROR
DEL "%TRUNKPATH%SvnVersion.tmp"

如果您不使用 TortoiseSVN,还有其他方法可以在文件中获取此信息。

您还需要从AssemblyInfo.cs文件中删除相同的信息,否则会出现编译错误。此外,为了加速 Debug 构建,这仅在 Release 构建中执行(并且仅在文件最初不存在时才在 Debug 构建中执行,例如在新签出之后)。

于 2012-11-08T14:23:55.417 回答