Visual Basic, warum kann ich nicht importieren “ - System.Zeichnung", wenn meine einzige Referenz ist "System"?
In Visual Studio 10 - Visual Basic, warum kann ich nicht importieren " - System.Zeichnung", wenn meine einzige Referenz ist "System"? Ich kann importieren " - System.- Laufzeit.InteropServices".
Reproduzieren mein problem:
1. Erstellen Sie ein Neues Projekt in Visual Studio 10 mit Visual Basic Class Library-Vorlage.
2. Hinzufügen "Imports System.Zeichnung" und "Importe System.- Laufzeit.InteropServices" am Anfang.
3. Entfernen Sie alle Referenzen außer "System" in der Referenzen-Bereich der Projekt-Eigenschaften.
Ergebnis:
Visual Studio kann nicht finden " - System.Zeichnung", aber es finden kann " - System.- Laufzeit.InteropServices". "System.Zeichnung" voll qualifiziert ist, so sollte das system in der Lage sein zu finden, es in den referenzierten "System".
Gedanken:
Es erscheint "System" und "System.Zeichnung" sind unterschiedliche namespaces (oder Container?) warum also nicht Qualifizierung "." arbeiten? Bedeutet "." etwas anderes vertreten?
"System" ist auch in "mscorlib" aber ist, dass der namespace, die verwendet wird, oder ist es eine andere?
"Von Microsoft.VisualBasic" ist auch aufgeführt in den importierten namespaces, aber es gibt nicht einen Hinweis darauf. Wie wurde es gefunden? Wo ist der "Importierte namespaces" Liste aufgefüllt aus?
Einen link zu Informationen aus der MSDN library wäre auf jeden Fall hilfreich sein. Ich habe auf der Suche durch Sie für eine Weile, kann aber nicht verstehen, warum "System.Zeichnung" wird nicht importiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den .NET Common Language-Infrastruktur hat, zwei verschiedene Konzepte:
System.Drawing
, die verwendet werden, zur Unterscheidung mehrerer Typen, die sonst den gleichen Namen haben.Namespaces bilden eine Hierarchie, basierend auf full-stop (dot) - Separatoren - Sie sind also gemeint, zu denken, dass die Typen in der
System.Runtime.InteropServices
- namespace untergeordnet sind diejenigen, die in derSystem.Runtime
namespace. Allerdings, soweit ich weiß, wird das CLI kümmert sich nicht um den Namen oder die Hierarchie der namespaces, außer insoweit, wie Sie Ihre Art eindeutige Namen.Darüber hinaus eine assembly kann Typen aus mehreren namespaces enthalten, auch diejenigen, die in den verschiedenen Hierarchien, und einem einzigen namespace definierten Typen enthalten kann in mehreren Baugruppen. Wenn man sich die MSDN-Dokumentation für einen Typ in der .NET-Bibliotheken, es wird Ihnen sagen, was die Montage, die Art ist in. Allerdings als Paolo Falabella hat darauf hingewiesen, MSDN werde Ihnen nicht sagen, was die Montage ein namespace ist, da eine single-namespace enthält Typen, die aus mehreren Baugruppen.
In Ihrem Szenario:
mscorlib
ist eine assembly, die definiert einige Arten in derSystem
namespace und viele andere, wieSystem.Runtime.InteropServices
wie Sie angemerkt haben. Allerdings, die Typen, die Sie verwenden in derSystem.Drawing
namespace befinden sich in derSystem.Drawing
Montage.Da Assemblys sind die Einheit von code-Bereitstellung und Wiederverwendung von Visual Studio-Projekte reference assemblies, namespaces nicht, und so müssen Sie fügen Sie einen Verweis auf System.Zeichnung Montage in das Visual Studio Projekt für Ihr Programm.
Die VB.NET
Importiert
- Anweisung (und die C# - äquivalent, diemit
- Direktive) lassen Sie beziehen sich auf Arten, die in einer namespace, ohne aus der namespace-name jedes mal. Das ist, mitImports System.Drawing
schreiben SieGraphics
im code stattSystem.Zeichnung.Grafiken
. Aber das ist alle Sie die Imports-Anweisung tut. Insbesondere:Imports System
nicht automatisch erstellen Projekt-Verweise auf jede Baugruppe in der Welt passiert, definieren Sie die Typen im System-namespace.Imports mscorlib
bedeutet nicht, dass Sie auf jede Art in die "mscorlib" - Montage durch den kurzen Namen. Es heißt, Sie können die Verweis-Typen in der "mscorlib" namespace durch kurze Namen, die nicht nur völlig anders, aber sehr unwahrscheinlich zu sein, was Sie wollen.Bottom line:, wenn Sie möchten, den Zugang zu GDI+, dann verwenden Sie die Typen im System.Drawing-namespace, aber der name hat nichts zu tun mit dem GDI+ Assemblynamen. Microsoft wählte den Namen "System.Zeichnung" für die Baugruppe mit GDI+ - Typen, aber es könnte gewählt haben "gdiplus-cli", "gdi-für-dotnet", oder auch "Frobinator". Was auch immer Namen, die Montage hat, müssen Sie fügen Sie einen Verweis auf die assembly. Und tun Sie das nicht in Ihrem source-code - Sie add assembly-Verweise in Ihrem Visual Studio-Projekt-Konfiguration.
MSDN hat eine veraltete aber immer noch eine gute Beschreibung der assemblies, namespaces, und die Unterschiede zwischen Ihnen, die Sie vielleicht nützlich finden.
imports System
ziehen in alle Assemblys definieren, die die gesamteSystem
namespace. Auf der anderen Seiteimports mscorlib
würde nur ziehen in den Teil, der es der Versammlung definiert.Imports
- Anweisung. Vielen Dank für Ihre Bemühungen. Bisher fand ich Sie sehr verwirrend und unklar. Nun Referenzierung und importieren von viel mehr Sinn.System.Drawing-namespace "Leben" in eine andere dll, die nicht referenziert wird zunächst in der Vorlage Projekt für eine Klassenbibliothek.
Müssen Sie fügen Sie einen Verweis auf
System.Drawing
(Rechtsklick auf das project -> Verweis hinzufügen; System.Die Zeichnung ist in der GAC).Auf der MSDN-Website, können Sie sehen, in welche Versammlung jeder Klasse "lebt". Zum Beispiel, in der Dokumentation für die Bitmap-Klasse Sie sehen können:
Beachten Sie, dass auf der namespace-Ebene Sie nicht finden können, die "Montage" von Informationen, weil Sie hinzufügen können Klassen im gleichen namespace aus verschiedenen assemblies.
System.Drawing
ist in einer separaten assembly, die Sie verweisen müssen.Sogar nach dem hinzufügen von System.Zeichnung als Referenz, die noch nicht im Projekt.