Fehlender Teilmodifikator bei Deklaration des Typs 'x' - verursacht durch automatisch generierten Code vom Designer

9

Die vollständige Fehlerbeschreibung lautet wie folgt:

Und ich fand ein paar ähnliche Fragen, die vorher gepostet wurden: A und B

Aber die Frage in A und B liefert keine Details zur Problembeschreibung (vielleicht haben wir die gleiche Fehlermeldung angezeigt, aber aus einem anderen Grund? Ich bin mir nicht sicher ..). Wie auch immer, Antwort in A und B hat keine gute Lösung. Also habe ich beschlossen, die ähnliche Frage mit weiteren Details zu posten.

Mein Problem ist wie folgt:

Der Designer generiert automatisch einen neuen Code (ErrSer1.Designer), der den gleichen Teilklassennamen in (ErrSer.Designer) enthält. [In printScreen_1 angezeigt - & gt; Zeile 25]

Der Unterschied, wie wir sehen können, ist einer in ErrSer1.Designer (der extra automatisch generierte)

  

interne Klasse ErrSer

Ein anderer ist in ErrSer.Designer (der ursprüngliche, der sein soll)

  

Teilklasse ErrSer

Hier ist der printScreen_1, um ErrSer1.Designer anzuzeigen (der extra automatisch generierte) [Hinweiszeile 25]

Und hier ist der printScreen_2, um ErrSer.Designer (das ursprüngliche und das übliche) zu zeigen [Hinweiszeile 3]

Zuletzt ... was kann ich tun, um dieses lästige Problem mit automatisch generiertem Code zu lösen?

EDIT1: Meine ErrSer Form wie folgt deklariert

%Vor%

EDIT2: Meine .csproj-Datei

Mein Speicherort für .csproj-Dateien

    
jhyap 02.04.2013, 00:53
quelle

4 Antworten

2

Sie haben (versehentlich) die Eigenschaft "Custom Tool" für die Datei "ErrSer.resx" auf "ResXFileCodeGenerator" gesetzt. Visual Studio generiert daher eine redundante Quelldatei für diese Datei.

Um das Problem zu lösen, öffnen Sie den Solution Explorer und dann im Ordner "FormFile" den Knoten "ErrSer.cs". Klicken Sie mit der rechten Maustaste auf die Datei "ErrSer.resx" und wählen Sie "Eigenschaften". Deaktivieren Sie im Eigenschaftenfenster den Wert der Eigenschaft "Benutzerdefiniertes Tool":

Löschen Sie den angegebenen Wert, und erstellen Sie dann das Projekt.

    
Mohammad Dehghan 21.11.2013 09:59
quelle
1

Ihr Problem besteht darin, dass Sie eine Form namens ErrSer und eine Ressourcendatei ErrSer mit einem benutzerdefinierten Toolset haben. Es gibt nur zwei Bedingungen, die mir in den Sinn kommen, dass dieser Fall eintritt.

  1. Sie haben ein Formular, und Sie haben versehentlich die Custom Tool-Eigenschaft für diese Datei festgelegt, sodass auch dann, wenn sie nicht generiert werden muss und eine ErrSer.Designer.cs-Datei für Ihre Ressourcen generiert wird.

  2. Sie haben ein Formular und Sie haben ein ResX mit demselben Namen erstellt.

Im ersten Fall entfernen Sie einfach die Custom Tool-Eigenschaft für die ResX-Datei und die generierte Designer-Datei. Im zweiten Fall benennen Sie Ihre ResX-Datei um.

    
edokan 20.11.2013 14:17
quelle
0

Wenn Sie sich diesen Artikel ansehen, scheint es, dass Sie das Verhalten von die Generierung des Codes hinterher.

Der angegebene Code scheint für 2005/2008 zu sein (letzte Änderung scheint 2009 zu sein)

vielleicht können Sie es für 2010 oder später anpassen

Es scheint eine Erweiterung für 2012 auf der Grundlage dieses Artikels zu geben hier

    
Fredou 15.11.2013 04:47
quelle
0

@jhyap: Sie haben zwei Möglichkeiten ..

  1. Markieren Sie die vom System generierte Klasse als Teil.

Grund: Sie haben bereits eine Teilklasse angelegt, die der Klasse ähnelt, die vom System generiert wird. Das System weiß jedoch nicht, dass Sie die Klasse mit demselben Namen erstellt haben. durch Markieren der systemgenerierten Klasse mit dem Schlüsselwort partially. Der Compiler wird die Klasse, die Sie geschrieben haben, mit der vom System generierten Klasse zusammenführen und sie als eine einzelne Klasse behandeln.

Hinweis: Wenn Sie die systemgenerierte Klasse als Teilweise markieren möchten, müssen Sie den Zugriffsmodifizierer von Intern auf Öffentlich ändern oder Ihre Klasse als Intern definieren. Da Zugriffsmodifizierer bei der Verwendung der partiellen Klassenkonzepte übereinstimmen sollten.

  1. Ändern Sie den Namen der Klasse, die Sie geschrieben haben.

Grund: wenn Sie sicherstellen möchten, dass die von Ihnen geschriebene Variable nichts mit der vom System generierten Klasse zu tun hat und Sie die Elemente der Klasse System generated nicht mit Ihrer zusammenführen wollen. dann ist dies die beste Lösung.

Einer der oben genannten Schritte löst Ihr Problem sicher.

    
Venkatesh Ellur 21.11.2013 11:35
quelle

Tags und Links