在C#Windows窗体应用程序项目中更改自动生成的代码

当您在Visual Studio 2008中打开一个新的C#Windows窗体应用程序项目时,您将获得大量自动生成的代码(AssemblyInfo.cs,Resources.Designer.cs,Settings.Designer.cs,Form1.Designer.cs,Form1.resx,Program的.cs)。

除了将工具箱中的组件添加到Form1.cs [Design]和代码到Form1.cs之外,您可以更改哪些文件? 如何? 应该保留哪些文件?

PS:据我所知,这是一个广泛的主题。 我不希望得到详尽的答案。 您想要分享的任何信息都可以。 我还想提一下,我是一个C#初学者,只想要最基本的信息。

PPS:如果您正在考虑回答“搜索互联网”或类似的问题,请不要。 我已经搜索过互联网,并会一次又一次地搜索,直到找到我正在寻找的答案。 我找到了一些有用的信息,但我觉得我需要更多。 我想我很可能会在stackoverflow.com上得到它。


更新1:此问题已得到解答。 我已经接受了sh_kamalh的答案。 我想将David和Hans Passant的答案标记为已被接受,但我认为您不能将多个答案标记为已接受的答案。 或者你呢?

从我可以从答案中解脱出来,你永远不应该在Visual Studio 2008中的C#Windows窗体应用程序项目中更改自动生成的代码。但是,我并不理解答案中的所有内容,并且可能忽略了某些内容。

如果您不同意上述摘要或以下答案,请随意添加一个矛盾的答案。 或者,如果您有一个补充以下答案的答案,请随意添加该答案。 我相信在这个问题上还有更多要说的。


更新2:您似乎也可以编写自己的C#Windows窗体应用程序项目版本(请参阅下面的Davids答案,我在编写“Update 1”时忘记了这一点)。 如果你这样做,你似乎应该从头开始。

为什么要更改自动生成的文件?
如果是表单,则不应更改.Designer.cs或.resx文件,因为每次更改表单时都会生成它们,因此下次重新生成代码时,您所做的任何更改都将被覆盖。
如果要在Designer.cs中更改某些内容,可以在原始cs文件中进行更改,因为该类被标记为partial,这意味着将文件Form1.cs和Form1.Designer.cs中的代码组合在一起生成最终代码。
如果要添加资源,请添加资源文件并保留生成的.resx文件。 对于AssemblyInfo.cs,您可以更改程序集的常规信息。

简而言之,只需保留生成的文件。

自动生成的文件:

  • AssemblyInfo.cs:其中的属性由Project + Properties,Application Tab,Assembly Information按钮设置。 直接编辑文件是可以的,IDE不容易被它搞糊涂。

  • Settings.Designer.cs:从Settings.settings文件自动生成,然后由Settings设计器生成。 对此文件的任何编辑都将很快丢失。

  • Resources.Designer.cs:从Resources.resx文件自动生成,而该资源又是从Resources设计器生成的。 对此文件的任何编辑都将很快丢失。

  • 表单 .Designer.cs:由表单设计器自动生成。 可以编辑此文件,没有存储表单布局的独立文件。 通过在设计时运行此代码并使用Reflection恢复表单和控件属性来生成设计视图。 当您关闭设计器时再次保存,它会重新生成InitializeComponent方法和控制变量。 让代码更改以在此过程中生存需要完全按照设计者本身的方式编写代码。 当您进行简单属性值更改之外的更改时,这是相当不重要的。 也存在相当大的风险,不明智的变化很容易导致exception。 当这种情况发生在设计时,你就会得到臭名昭着的WSOD(白色银幕),它会显示一个经常非常神秘的例外,并告诉你不能再设计你的表格了。

通过观察设计器中修改表单时对InitializeComponent所做的更改,您可以了解设计器生成代码的方式。 要做到这一点当然不是初学者的材料,当你加快.NET编程速度时,你可能需要学习更多紧迫的事情。 设计师可以让您的生活更轻松,并最大限度地降低错误风险。

这些文件中的大多数都是模板化的,您可以修改它们在新项目中的包含以及文件中包含的内容。 您甚至可以为新项目类型或项目创建自己的模板。 http://msdn.microsoft.com/en-us/magazine/cc188697.aspx

至于修改已经存在的内容,除非你确定你要处理的每个项目都需要这些更改我不建议这样做,否则为另一个项目创建一个新模板会更容易/文件类型。