Winforms 是否有更简单的方法合并Windows窗体.Designer文件?

Winforms 是否有更简单的方法合并Windows窗体.Designer文件?,winforms,version-control,mercurial,merge,Winforms,Version Control,Mercurial,Merge,最近,我们的小团队刚从TFS转到Mercurial。3人参与的主要项目是C#中的Windows窗体应用程序。每次使用设计器时,即使是简单的更改,它也会对.designer文件进行大量的重新排列和更改。如果有两个人处理这个文件,即使只是做一些简单的更改,合并也绝对是一场噩梦。有没有简单的方法来解决这个问题?在TFS中,我们关闭了并发编辑,因此没有这个问题。合并此类文件总是很痛苦。。。这就是为什么Mercurial存在一些“锁定”扩展的原因,因此如果需要,您可以使用与TFS相同的工作流 例如,您可以

最近,我们的小团队刚从TFS转到Mercurial。3人参与的主要项目是C#中的Windows窗体应用程序。每次使用设计器时,即使是简单的更改,它也会对.designer文件进行大量的重新排列和更改。如果有两个人处理这个文件,即使只是做一些简单的更改,合并也绝对是一场噩梦。有没有简单的方法来解决这个问题?在TFS中,我们关闭了并发编辑,因此没有这个问题。

合并此类文件总是很痛苦。。。这就是为什么Mercurial存在一些“锁定”扩展的原因,因此如果需要,您可以使用与TFS相同的工作流


例如,您可以使用Martin Geisler编写的来锁定.Designer文件,直到下一次推送
之前,这样做可以避免任何并发修改,从而避免合并。

问题是每次代码生成引擎都可能以不同的顺序生成代码!!!这使得合并成为一种痛苦

WinForm(.NET)设计器、Swing(Java)设计器依赖于代码生成引擎

ASP.NET的designer.cs只包含支持字段,因此不太可能受到影响

WPF的backing字段是在obj/*.g.cs中生成的,不需要保留在源代码管理中,因此没有合并问题。

我就是这样做的:

  • 从主/开发分支复制/使用.Desinger.cs并在VS中打开项目
  • 复制整个项目(所有带有.git的文件),签出您的_功能分支并在VS中打开项目
    • 现在,您应该有两个VS实例(一个在主分支上,一个在您的_特性上)
  • 将控件(ctrl+c)(在设计视图/模式中)从一个VS复制到另一个VS

  • 这不是一个很好的解决方案,但对合并
    *.Designer.cs
    有很大帮助。这是一个痛苦的时期。我想问同样的关于web表单设计器文件的问题。我想锁定可能是最好的解决方案,但当您真正想做的是让每个人都工作,然后稍后合并时,锁定并不是一个非常令人满意的解决方案。不过,我认为这并不能解决分支之间合并的问题,尽管OP不是这样要求的。“锁定”文件不是一个合适的解决方案(在分布式环境中不实用)。问题是Microsoft的代码生成器没有注意使文件可读(例如,对成员进行排序)。如果它能以有序的方式输出代码,那么你就不必为了一个小小的一行属性更改而对成百上千个大块头进行排序,因为只有那一行会更改。我真的不明白他们是如何实现它的,因为它如此不可预测。他们一定是为了好玩或什么而使用RNG的。。。