【问题标题】:Missing partial modifier on declaration of type 'x' - cause by auto-generated code by designer声明类型“x”时缺少部分修饰符 - 由设计人员自动生成的代码引起
【发布时间】:2013-03-23 04:07:44
【问题描述】:

完整的错误描述如下:

我发现之前发布了一些类似的问题:AB

但是A和B中的问题没有提供问题描述的详细信息(也许我们提示了相同的错误信息但由不同的原因引起?我不确定..)。无论如何,A和B中的答案都没有好的解决方案。所以我决定发布类似的问题并提供更多细节。

我的问题如下:

Designer 会自动生成一个新代码 (ErrSer1.Designer),该代码在 (ErrSer.Designer) 中包含相同的部分类名称。 [显示在 printScreen_1 -> 第 25 行]

我们可以看到的区别是,一个在 ErrSer1.Designer 中(额外的自动生成的)

内部类 ErrSer

另一个在 ErrSer.Designer 中(原来的那个应该是)

部分类 ErrSer

这里是显示 ErrSer1.Designer 的 printScreen_1(额外的自动生成的)[注意第 25 行]

这里是显示 ErrSer.Designer 的 printScreen_2(原来的和常用的)[注意第 3 行]

最后...如何解决这个烦人的自动生成代码问题?

EDIT1: 我的 ErrSer 表单是这样声明的

public partial class ErrSer : Form

EDIT2: 我的 .csproj 文件

My .csproj file location

【问题讨论】:

  • 即使不打开设计器,它是否会重建它?也就是说,只打开后面的代码来改变它,从不打开实际的设计器?
  • 好吧..这个最烦人的事情是重复出现不是模式。到目前为止,我所做的是,我删除了自动生成的 ErrSer1.Designer 中的整个文本并关闭它。然后当我重新编译时,它会变得很好。我昨天也是这样做的,但是今天我再次打开编译时,提示同样的信息。
  • 我认为每次打开实际的设计器引擎时设计器都会更新它。
  • 好的.. 我认为当我在设计器打开的情况下运行代码时,这确实是设计器的问题。所以,对于那些和我有类似问题的人来说,临时解决方案,关闭设计器选项卡,然后运行你的代码。
  • 您的实际表单是如何声明的? (即当你“查看代码”的形式。这个类也需要是公共的和部分的,并且具有相同的类名)

标签: c# winforms partial declare


【解决方案1】:

您(不小心)将“ErrSer.resx”文件的“自定义工具”属性设置为“ResXFileCodeGenerator”。因此 Visual Studio 会为该文件生成一个冗余源文件。

要解决问题,请打开解决方案资源管理器,然后在“FormFile”文件夹中展开“ErrSer.cs”节点。右键单击“ErrSer.resx”文件并选择“属性”。在属性窗口中清除“自定义工具”属性的值:

清除指定值,然后构建项目。

【讨论】:

  • 这应该不是根本原因。因为我们创建了一个设置了 ResXFileCodeGenerator 的新项目,所以没有任何问题。到目前为止,只有这个带有 ResXFileCodeGeberator 集的特定项目存在问题。因此,我想得出结论,这是 VS2010 中的 ResXFileCodeGenerator 错误。
  • 你的意思是你总是为所有的表单设置这个属性?手动?您的其他表单都没有在其 resx 文件中设置此属性。此属性仅针对此特定文件设置。十多年来,我一直在创建 winforms 应用程序,但从未见过在 forms 的 .resx 文件中设置此属性。这是为项目资源文件自动设置的属性(与任何形式无关)。
  • 试试这个:创建一个新的 Windows 窗体应用程序。打开解决方案资源管理器,展开 Form1,选择 Form1.resx 并将其“自定义工具”属性设置为“ResXFileCodeGenerator”。现在构建项目。您将收到完全相同的错误消息。所以,这的根本原因。
【解决方案2】:

您的问题是您有一个名为ErrSerForm 和一个名为ErrSer 的资源文件,其中包含自定义工具集。发生这种情况,我想到的只有两个条件

  1. 您有一个表单,并且您不小心在该文件上设置了自定义工具属性,因此即使您不需要生成它并且会为您的资源生成 ErrSer.Designer.cs 文件。

  2. 你有一个表单并且你创建了一个同名的 ResX。

对于第一种情况,只需删除 ResX 文件和生成的 Designer 文件上的自定义工具属性。 对于第二种情况,重命名您的 ResX 文件。

【讨论】:

    【解决方案3】:

    看着这个article,你似乎可以改变后面代码生成的行为。

    提供的代码似乎适用于 vs 2005/2008(最后一次修改似乎是 2009 年)

    也许你可以在 2010 年或以后调整它

    根据这篇文章here似乎有2012年的扩展

    【讨论】:

      【解决方案4】:

      @jhyap:你有两个选择..

      1. 将系统生成的类标记为部分。

      原因:您已经创建了一个与系统生成的类相似的部分类。但是系统不知道您创建了具有相同名称的类。通过使用关键字 partial 标记系统生成的类。编译器会将您编写的类与系统生成的类合并,并将其视为单个类。

      注意:如果您决定将系统生成的类标记为部分,则必须将访问修饰符从内部修改为公共,或者将您的类设置为内部。因为访问修饰符在使用部分类概念时应该匹配。

      1. 更改您编写的类的名称。

      原因:如果您想确保您编写的类与系统生成的类无关,并且您不想将系统生成的类的成员与您的合并。那么这是最好的解决方案。

      上述步骤之一肯定会解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多