Fehler beim Importieren des Typs Color

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.

    Fehler beim Importieren des Typs Color

    Moin,

    ich bin derzeit dabei einige wiederkehrenden Funktionen und Klassen in Klassenbibliotheken (dlls) auszulagern.

    Als Verweis importiert werden diese in Anwendungen mit VB.Net 4.8.
    Die Dlls werden, um zum Testen wie es sich so verhält, in .net Core 3.1 erstellt.

    Jetzt erhalte ich in meiner .Net Anwendung, welche eine erstellte und importierte DLL als Verweis enthält, bei einem Objekt mit einer Color Property eine Fehlermeldung.

    Quellcode

    1. ​Fehler BC31091 Fehler beim Importieren des Typs "Color" aus der Assembly oder dem Modul "System.Drawing.Primitives.dll".


    Verstehen sich .Color aus .Net Core und .Color in VB.Net nicht miteinander, oder wo liegt das Problem?
    Macht es weiterhin Sinn, die externe DLL in .Net Core zu erstellen?

    Grüße :)
    @BlueLagoonX Du musst den richtigen Namespace angeben.
    Die beiden sind zwar ähnlich, haben jedoch nix miteinander zu tun.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich stehe gerade etwas auf dem Schlauch.

    Im ObjectExplorer steht beim externen Objekt System.Drawing.Color als Datentyp.

    Hier mal ein Beispiel für den Zugriff auf die Color Property im Code.

    VB.NET-Quellcode

    1. 'Objekt in externer DLL
    2. Public NotInheritable Class Item
    3. Public ReadOnly Property Farbe As System.Drawing.Color = Color.Black
    4. Public ReadOnly Property Kennwert As Double = 0.0
    5. Sub New(Farbe_ As Color, Kennwert_ As Double)
    6. With Me
    7. Farbe = Farbe_
    8. Kennwert = Kennwert_
    9. End With
    10. End Sub
    11. End Class


    VB.NET-Quellcode

    1. 'Code im Programm
    2. Dim Lst_Duesenkennwerte As New Quartier_Shared.Duesenkennwert
    3. 'Quartier_Shared ist meine DLL
    4. 'Lst_Duesenkennwerte.Items gibt ist eine List Of() aus dem o.g. Objekt.
    5. 'Bei Where q.Farbe knallt es mit der o.g. Fehlermeldung
    6. For Each Ctrl In (From q In gb_DKW.Controls().Cast(Of Control) Where TypeOf q Is Button).Cast(Of Button)
    7. Dim Item = (From q In Lst_Duesenkennwerte.Items Where q.Farbe.ToArgb = Ctrl.BackColor.ToArgb).FirstOrDefault
    8. If Not Item Is Nothing Then Ctrl.Tag = Item.Kennwert
    9. Next


    Wo ist welcher Namespace falsch und muss auf was geändert werden?
    @BlueLagoonX Wewlche Namespaces hast Du denn importiert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BlueLagoonX schrieb:

    Als Verweis importiert werden diese in Anwendungen mit VB.Net 4.8.
    Die Dlls werden, um zum Testen wie es sich so verhält, in .net Core 3.1 erstellt.


    Normalerweise geht dieser Anzatz nicht!
    .Net 4.8 und älter (.Net Framework) sind nicht mit .Net Core und neuer kompatibel. Genau dafür wurde .Net Standard erstellt. Du kannst keine .Net Framwork dll in .Net Core benutzen und auch keine .Net Core dll in .Net Framework (Manchmal schon, aber das ist eher glück?).
    .NET Standard
    Der geteile Code, der unter beiden .Net Framework und .Net Core laufen soll, muss in ein .Net Standard Projekt gepackt werden.

    Oder du gehst direkt auf .Net 5. Das lößt alles davor ab und ist die führende Linie:
    @RodFromGermany
    Ich habe die DLL jetzt in .Net 4.8 statt Core erstellt und jetzt funktioniert sie problemlos.

    @Bluespide
    Dachte ich mir schon, dass es an .Net Core liegt.Hätte ja klappen können :)

    VB.Net 5.0 gibts in VS2019 nicht zur Auswahl, nur 4.8. Habe auch bereits das DevKit zu 5.0, allerdings taucht nach wie vor nur maximal 4.8 in den Projekteigenschaften auf.
    Unter neues Projekt > Windows Forms-App(.NET Framework) steht maximal 4.8 zur Verfügung,
    Unter neues Projekt > Windows Forms-App gibts .Net Core 3.1 und 5.0 zur Auswahl

    Umstellen lässt sich das bestehende Projekt als nicht von 4.8 auf 5.0, oder gibts dafür einen Weg den ich nicht sehe?
    Bis 4.8 konnte man das Framework in den Projekteigenschaften einfach ändern ...
    Das liegt daran, dass NET 5 nicht die weiterführung von ".Net Framework 4.8" ist, sondern von NET Core 3.1 . NET 5 hat nichts mit dem bekannten .NET Framework X.X zutun.

    Ein .Net Framework Projekt lässt sich allerdings in der Regel, je nach verwendeten externen DLLs, mit Aufwand nach NET 5 migrieren.

    docs.microsoft.com/de-de/dotne…desktop/example-migration