代码之家  ›  专栏  ›  技术社区  ›  Shane Fulmer Lasse V. Karlsen

为什么visual studio设计器要删除代码?

  •  4
  • Shane Fulmer Lasse V. Karlsen  · 技术社区  · 14 年前

    在当前项目的整个过程中,visual studio设计器多次进行修改,导致代码丢失。例如,在设计器代码中手动设置的事件处理程序连接丢失。有人知道为什么会这样吗?

    编辑:我知道手动编辑这些文件不是一个好主意,但是通过设计器设置的其他事件连接也会发生这种情况。

    5 回复  |  直到 7 年前
        1
  •  12
  •   Ian    14 年前

    首先,请阅读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这一事实应该会向新开发人员提出问题,问他们为什么要使用奇怪的扩展名。

        2
  •  5
  •   Ian    13 年前

    你们不会修改生成的代码文件吧?喜欢 MyForm.Designer.cs ?这就是为什么我们被给予 partial 类。

        3
  •  3
  •   Quintin Robinson    14 年前

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

        4
  •  0
  •   Alex F    14 年前

    只在您自己的.cs文件中编写所有必需的初始化代码,您可以在许多地方执行此操作,如表单构造函数和表单加载事件处理程序。

        5
  •  0
  •   Al Meadows    7 年前

    将设计器代码移动到用户维护的代码类中会破坏能够修改用户界面的好处。如果程序再也不需要修改的话,也许您会希望这样做,但是如果是这样的话…好处在哪里呢?

    自从visual studio最初发布以来,这个designer类丢失代码行的问题就一直存在,并且给我带来了无数的噩梦,因为丢失可能发生在几周前,也就是程序之前被修改的时候。

    我无法证明这一点,但很明显,微软代码生成器中的某些东西出现了故障,并且没有任何警报告诉你它崩溃了。所以,微软…解决什么是崩溃,或者至少,告诉我们当它发生的时候。