声明类型'x'时缺少部分修饰符 - 由设计者自动生成的代码引起

时间:2013-04-02 00:53:07

标签: c# winforms partial declare

完整的错误说明如下:

enter image description here

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

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

我的问题如下:

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

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

  

内部类ErrSer

另一个是ErrSer.Designer(最初假设的那个)

  

部分类ErrSer

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

enter image description here

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

enter image description here

最后......我该怎么做才能解决这个恼人的自动生成代码问题?

EDIT1: 我的ErrSer表单就像这样声明了

public partial class ErrSer : Form

EDIT2: 我的.csproj文件

My .csproj file location

4 个答案:

答案 0 :(得分:2)

您(意外)已将“ErrSer.resx”文件的“自定义工具”属性设置为“ResXFileCodeGenerator”。因此,Visual Studio会为该文件生成冗余源文件。

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

Solution Explorer and Properties windows

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

答案 1 :(得分:1)

您的问题是,您有一个名为Form的{​​{1}}和一个名为ErrSer的资源文件,其中包含自定义工具集。对于这种情况,我只想到两个条件

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

  2. 您有一个表单,并且您创建了一个具有相同名称的ResX。

  3. 对于第一种情况,只需删除ResX文件上的Custom Tool属性并生成Designer文件。 对于第二种情况,请重命名您的ResX文件。

答案 2 :(得分:0)

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

所提供的代码似乎是针对vs 2005/2008(最后修改似乎是2009年)

也许你可以在2010年或之后适应它

根据这篇文章here

,似乎有2012年的扩展

答案 3 :(得分:0)

@jhyap:你有两个选择..

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

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

    1. 更改您已编写的课程的名称。
    2. 原因:如果您想确保您编写的calss与系统生成的类无关,并且您不希望将System生成的类的成员与您的类合并。那么这是最好的解决方案。

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