| 

.NET C# Java Javascript Exception

4
Hallo Zusammen,

jetzt passe ich zum wiederholten Male den Namespace im Designer-Teil an. Jedes mal wenn ich Änderungen über den Ansicht-Designer vornehme wird der Designer-Teil neu generiert. Leider verkennt VS2008 den richtigen Namespace einzelner Komponenten im Designer-Teil.

Das Problem taucht immer dann auf wenn ich im Projekt einen Unterordner anlege und allen enthaltenen Komponenten (Klassen, Views u.s.w.) einen erweiterten Namespace spendiere.

Namespace des Programmes:
namespace ModbusTool { }


Namespace eines Usercontrols im Unterordner:
namespace ModbusTool.Control { }


Nun erzeugt der Ansichts-Designer für den Designer-Teil folgenden ähnlichen Code:
namespace ModbusTool
{
public partial class ModbusToolEdit
{
...
bcOutput = new ModbusTool.Control.BitControl();
...
ModbusTool.Control.BitControl bcOutput;
}
}


Da aber ModbusToolEdit bereits im Namespace ModbusTool ist, meldet der Compiler verständlicherweise einen Fehler. Wenn ich diesen Umstand manuell abändere zu:
namespace ModbusTool
{
public partial class ModbusToolEdit
{
...
bcOutput = new Control.BitControl();
...
Control.BitControl bcOutput;
}
}


... funktioniert der Code wieder wunderbar, bis ich die Gui abändere.

Wenn ich eine Gui-Komponente in VS2008 anwähle habe ich eine Eigenschaft die sich "Namespace des benutzerdefinierten Tools" nennt. Kann ich damit das Problem lösen? "ModbusTool" hat nicht geholfen.

Hat jemand einen Tipp. Ich bin am Verzweifeln. Per Google habe ich nichts herausgefunden.

Vielen Dank für Mühen.

Smartic

Edit: Namensraum und Klassennamen angepasst, vormals "Foo" und "Foo.Control" sowie "MyMainGUI" und "MyControl";

BitControl wäre wie folgt definiert:

namespace ModbusTool.Control
{
public class BitControl : UserControl { ... }
}


Edit: Die Fehlermeldung lautet:
Der Typname "BitControl" ist im Typ "ModbusTool.ModbusTool" nicht vorhanden.


Vollständiger weise muss eine weitere Information hinzu gezogen werden - Siehe verdacht von Matthias -. Das Projekt beinhaltet eine Klasse mit dem selbigen Namen wie der Namespace.
namespace ModbusTool
{
public class ModbusTool { ... }
}
20.10.2011
smartic 510 1 8
smartic 510 1 8
Dein Beispielcode mit den neuen Namespace- und Klassennamen compiliert bei mir. Welchen Compiler-Fehler bekommst Du denn?
Matthias Hlawatsch 20.10.2011
Mir ist grad ein Verdacht gekommen, siehe das Update in meiner Antwort...
Matthias Hlawatsch 20.10.2011
1 Antwort
1
Zu den Merkwürdigkeiten der Namespace-Auflösung in C# habe ich selbst schon mal eine Frage gestellt. Vielleicht helfen Dir die Antworten darin schon weiter.

Mit Blick auf Deinen Beispielcode kann ich
... meldet der Compiler verständlicherweise einen Fehler ...
noch nicht so recht nachvollziehen. Ich vermute, dass Du hier nicht die echten Namespaces und Klassennamen angegeben hast, sondern die Beschreibung vereinfachen wolltest. Möglicherweise ist dabei aber gerade die Ursache des Problems mit verlorengegangen. Kannst Du die echten Namespaces und Klassennamen für myMainGUI und MyControl angeben?

Update
Du hast nicht zufällig noch irgendwo eine Klasse ModbusTool? Dann würde nämlich der Compiler "ModbusTool.Control" als den Member Control der Klasse ModbusTool interpretieren, den es natürlich nicht gibt. Wenn Du ModbusTool wegläßt, erkennt er Control wieder als Namespace-Namen.
Deshalb: Niemals, wirklich niemals eine Klasse so nennen wie einen Namespace. Von daher ist auch Dein Namespace "Control" eine gefährliche Wahl - er könnte mit der Klasse System.Windows.Forms.Control kollidieren.
20.10.2011
Matthias Hlawatsch 13,2k 4 9
Danke für die schelle Antwort.

Ich bin davon ausgegangen dass es genauso Funktioniert wie in Java, aber die Fragen-Diskussion die du verlinkt hast, beschreibt ja was anderes - sehr interessant.

Nehme ich also an das "Foo.Control" keine Unterteilung von "Foo" ist, eher als Eigenständiger Name, so dass ich mit gleicher Wirkung schreiben könnte "Foo_Control". Liege ich da richtig?
smartic 20.10.2011
Eher nicht. Du hast zwar in C# mehr Freiheiten als in Java, aber ich würde deshalb trotzdem nicht gegen die Konventionen verstoßen. Z.B. leitet VS beim Anlegen neuer Klassen den Namespace aus dem Standard-Namespace des Projekts und der Ordnerhierarchie ab. Da kann man schnell ein Chaos anrichten oder sich viel Arbeit machen, wenn man versucht, sein eigenes Süppchen zu kochen. Versuch lieber, die eigentliche Problemursache zu finden.
Matthias Hlawatsch 20.10.2011
Mensch du musst Hellseher sein! Das war das Problem. Ich habe tatsächlich eine Klasse mit dem selbigen Namen wie der Namespace. Ich erdachte diese Information als nicht wichtige. Vielen Dank.
smartic 21.10.2011
Danke für die Blumen :-) Eine lebendige Erinnerung an überwundene Fallstricke kann beim Hellsehen sehr hilfreich sein ;-)
Matthias Hlawatsch 21.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH