为什么Visual Studio Designer会删除代码?

时间:2010-03-02 15:45:18

标签: c# visual-studio visual-studio-2008

在我们当前项目的整个过程中,Visual Studio设计师已多次进行修改,导致代码丢失。例如,在设计器代码中手动设置的事件处理程序布线丢失了。有谁知道为什么会这样?

编辑:据我所知,手动编辑这些文件并不是一个好主意,但也可以通过设计师设置的其他事件布线来实现。

5 个答案:

答案 0 :(得分:12)

对于初学者来说,请阅读designer.cs文件顶部的XML。

/// <summary>
/// Required method for Designer support - do not modify
/// contents of this method with the code editor.
/// </summary>
private void InitializeComponent()

通常,您不应该修改这些文件,因为它们是自动生成的。这可能是为什么在主要的分类下面隐藏代码的原因。

我偶尔发现该进程已经删除了自己生成的代码,我必须将其合并回来。最常见的是它决定不再实例化自定义用户控件,所以当我开始运行时,我得到了一个NullReferenceException。

答案是将代码放在其他地方,就像在构造函数中调用InitializeComponent()方法之前一样。如果开发人员没有意识到这一点,那么你应该通知他们并教育他们,文件是.designer.cs的事实应该向新开发者提出问题,为什么这个奇怪的扩展。

答案 1 :(得分:5)

你们不修改生成的代码文件,是吗?像MyForm.Designer.cs一样?这就是我们获得partial课程的原因。

答案 2 :(得分:3)

因为它是设计器生成的或多或少维护的代码。由于您描述的行为,我们建议您手动添加或修改设计器分部类中的代码(我认为它甚至在生成的文件本身中提到了这一点)。如果您需要手动连接事件处理程序,请在您的自定义代码中执行它,可能是您控件的构造函数。

答案 3 :(得分:0)

只在你自己的.cs文件中写下所有必要的初始化代码,你有很多地方可以做到这一点,比如表单构造函数和表单Load事件处理程序。

答案 4 :(得分:0)

将设计器代码移动到用户维护的代码类中会破坏能够修改用户界面的好处。也许这可能是你想要做的事情,如果程序永远不需要再次修改,但如果是这样的话......那么好处也在哪里?

自Visual Studio最初发布以来,这个设计类失去代码行的问题已经存在,并且导致了我无数的噩梦,因为丢失发生在可能几周之前,当时程序之前被修改过。

我无法证明这一点,但很明显微软的代码生成器中的某些内容失败了,并且没有任何警报告诉你它崩溃了。所以,微软......解决崩溃的问题,或者至少在事情发生时告诉我们。