为什么C#设计器生成的代码(如Form1.designer.cs)会对Subversion造成严重破坏?我的工作室最近从SourceSafe切换到Subversion以使我们摆脱自动锁定。这会导致同时编辑Forms,这很棒。但是当多个开发人员提交更改时,设计人员创建的代码文件(都命名为TheFormName.designer.cs)会导致难以解决的冲突。据我所知,这是因为当用户修改设计器生成的代码时,它会被重新排列,而不管实际更改了多少。我不熟悉C#或Windows窗体设计器,但查看我可以在网上找到的一些designer.cs文件,它们没有特别复杂的结构。它的哪些部分正在重新排列?我猜主要是InitializeComponent()方法中的属性顺序乱了?如果是这种情况,您可以编写一个简单的脚本,按字母顺序重新排列行,特别是如果您从不手动编辑这些文件,并将其用作Subversion中的预提交挂钩脚本。嗯,对...从头开始。该部分底部的大红色框表示您不应修改挂钩脚本中的事务。但是您也许可以找到另一种方法来在更改designer.cs文件和提交它之间的某处运行该脚本。编辑:实际上,考虑到scraimer对此的评论:完全损坏,但在最坏的情况下,就在合并之前,我可以对两个文件进行排序,并使合并只是一个逐行的事情......你不能有Subversion设置外部合并程序?我一直在使用KDiff3,它可以在进行比较或合并之前运行预处理器命令,因此您可以使该过程自动化。以下是一些可以尝试的事情:希望对您有所帮助。我很确定这个问题没有灵丹妙药,因为设计师在designer.cs上到处踩踏板。我只能建议尽量减少设计师的使用。我个人只在代码中hook事件,只使用设计器进行初始化和定位。所以不难理解变更集中的差异(“哦,有人添加了一个按钮”,“哦,有人改变了它的外观”)。是的,设计师的乱七八糟的重新排列绝对令人讨厌。Microsoft使用自己的工具吗?Microsoft是否查看他们检查版本控制的内容?这太不可思议了。我们团队的“解决方案”是在完成编辑后手动编辑Designer文件,将内容放回原位,以便基于文本的差异可读,从而可以合并并发更改。幸运的是,大多数VisualStudio的重排都很简单,所以这很有用。遗憾的是,我们发现此步骤对于验证正确性是必要的-我们发现Designer默默地删除了需要的内容,从而导致代码损坏。因此,必须执行此步骤以解决潜伏在内部的任何数据破坏性错误。叹。由于Microsoft在修复错误方面的记录不佳,唯一的解决方案可能是改进Mono的WinFormsDesigner,以便在黄金时间完成。在使用像subversion这样的合并样式源代码控制系统时,我知道真正避免这个问题的唯一方法是在不使用设计器的情况下手动编写表单代码。显然,这不会很好地工作,因为手动编码这些表可能需要一段时间。发生这种情况的原因是因为控件属性由设计者按照它们在窗体上的放置顺序进行序列化。剪切和粘贴会影响此顺序以及移动控件以拥有新的父级(例如,当控件直接位于窗体上时将其移动到面板上)。我在一个大型项目中遇到了这个问题,不得不求助于一种相当丑陋的方法——将designer.cs文件与签入目标修订版本区分开来,然后使用合并工具手动合并它们。这并不理想,但这是我认为它与svn或其他合并样式源代码控制工具保持一致的唯一方式。正如其他人所指出的,另一种选择是使用带有源代码控制的锁定方法,但这也有令人不快的副作用。以上是C#学习教程:为什么C#设计器生成的代码(比如Form1.designer.cs)会在Subversion上肆虐?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
