【问题标题】:Changing autogenerated code in a C# Windows Forms Application project在 C# Windows 窗体应用程序项目中更改自动生成的代码
【发布时间】:2011-04-16 17:40:19
【问题描述】:

当您在 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 回答,我在写“更新 1”时忘记了这个答案)。如果你这样做,似乎你也应该从头开始。

【问题讨论】:

  • 感谢您的回答!你为什么这么认为?
  • 如果您弄乱了自动生成的文件,Visual Studio 迟早会替换您的更改。
  • 所有更改还是会保留相同的更改?

标签: c# winforms project auto-generate


【解决方案1】:

自动生成的文件:

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

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

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

  • Form.Designer.cs :由表单设计器自动生成。可以编辑此文件,没有存储表单布局的独立文件。通过在设计时运行此代码并使用反射来恢复表单和控件属性来生成设计视图。并在您关闭设计器时再次保存,它会重新生成 InitializeComponent 方法和控制变量。要使您的代码更改以在此过程中继续存在,需要以设计者自己的方式完全编写代码。当您进行超出简单属性值更改的更改时,这是相当不重要的。还有相当大的风险,不明智的更改很容易导致异常。当在设计时发生这种情况时,您会得到臭名昭著的 WSOD(白屏),它会显示一个通常非常神秘的异常,并告诉您不能再设计表单了。

当您在设计器中修改表单时,您可以通过观察它对 InitializeComponent 所做的更改来了解更多关于设计器生成代码的方式。正确掌握这一点当然不是初学者材料,当您加快 .NET 编程速度时,您可能需要学习更多紧迫的东西。设计师的存在是为了让您的生活更轻松,并将出错的风险降到最低。

【讨论】:

  • 感谢您的回答!我不明白这一切,但我明白的部分是有启发性的。 --- PS:我已将来自 sh_kamalh 的答案标记为已接受的答案。我也想标记这个答案,但我认为您不能将多个答案标记为已接受的答案。或者你可以吗?
【解决方案2】:

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

长话短说,只需保持生成的文件不变。

【讨论】:

  • 感谢您的回答!我不知道是否要更改自动生成的文件,因为我还不太了解其中的代码。现在,我只想知道哪些自动生成的文件可以更改,哪些自动生成的文件不能更改。据我了解到目前为止我得到的答案,最好的方法是永远不要更改自动生成的文件。
【解决方案3】:

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

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

【讨论】:

  • 谢谢!我已将链接添加到我的收藏夹文件夹。当我对 C# 有了更多了解时,这篇文章很可能会很有用。但是现在,我觉得它压倒了,因为我还没有完全理解的单词太多了。在处理这类较长的文章之前,我需要阅读几篇较短的文章,涵盖更基本的 C# 概念。 --- PS:我已将 sh_kamalh 的答案标记为已接受的答案。我也想标记这个答案,但我认为您不能将多个答案标记为已接受的答案。或者你可以吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 2019-03-22
  • 2018-12-06
相关资源
最近更新 更多