Eigene DLL einbinden Fehler BC30652

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Eigene DLL einbinden Fehler BC30652

    Hallo,

    ich habe eine Project erstellt mit dem Namen DLLErstellen mit diesem Inhalt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Fahrzeug
    2. Private Geschwindigkeit As Integer
    3. Public Sub Beschleunigen(wert As Integer)
    4. Geschwindigkeit += wert
    5. End Sub
    6. Public Overrides Function ToString() As String
    7. Return "Geschwindigkei: " & Geschwindigkeit
    8. End Function
    9. End Class


    Habe das Project erstellt und die Datei unter Windows/System32 abgelegt.

    Danach habe ich Per Windows-Taste + Rdie DLL im System registriert:

    VB.NET-Quellcode

    1. %systemroot%\System32\regsvr32.exe C:\Windows\System32\DLLErstellen.dll


    Da kam schon der erste Fehler, Siehe Bild 1:


    Danach habe ich ein zweites Project erstellt mit dem Namen: DLLNutzen, habe den Verweis auf die dll gelegt, den Imports DLLErstellen in die Oberste Zeile geschriebe.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports DLLErstellen
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. End Sub
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim vespa As New Fahrzeug
    7. LblAnzeige.Text = vespa.ToString()
    8. vespa.Beschleunigen(20)
    9. LblAnzeige.Text &= vbCrLf & vespa.ToString()
    10. End Sub
    11. End Class


    nun bekomme ich diesen Fehler siehe Bild 2


    Weiß jemand was ich falsch mache? Es ist nur zu Übungszwecke gedacht.

    Für Tips bin ich sehr Dankbar
    Hallo

    Du musst den Verweis ja nur einbinden, dann wird im Projektausgabeverzeichniss eine Kopie erstellt.

    Was willst du genau machen? Warum im Systemverzeichniss. Willst du die DLL im GAC haben?


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Den Verweis habe ich eingebunden, zweck von dem ganzen soll ganz einfach nur der sein, das ich den zusammenhang verstehe ^ was du mit GAC meinst weiß ich leider nicht, aber ich möchte die dll verwenden so wie man sie im normalfall verwenden (ich gehe davon einfach mal aus das die dll datei im system32 ordner liegen muss, registriert sein muss bevor man Sie einbinden kann.
    Wer legt seine .dlls in den System32 Ordner?
    Einfach im VS Verweis hinzufügen --> die .dll auswählen. Nix mit regsvr
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Okay, das habe ich auch schon versucht, da kommt dann dieser Fehler in der IDE

    VB.NET-Quellcode

    1. Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    2. Fehler BC30652 Es ist ein Verweis auf die Assembly "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" erforderlich, die den Typ "[Object]" enthält. Fügen Sie dem Projekt einen Verweis hinzu. DLLNutzen C:\Users\USER\source\repos\DLLNutzen\DLLNutzen\Form1.vb 14 Aktiv



    EDIT:
    Ist das ein Irrtum das IDR alle DLL´s von programme usw in der System32 liegen? (zumindest die Unveränderlichen)
    Ja ist es. Im Windows Verzeichnis sollten lediglich die von Windows verwendeten .dlls liegen. (Driver etc.)
    Dlls von Programmen liegen idr im Programmverzeichnis.

    Wenn du ein Projekt erstellst, welches eine Klassenbibliothek ist, kannst du einfach mit Visual Studio einen Verweis drauf setzen.
    Wenn du bei beides Projekten (dem Klassenbibliothek Projekt, sowie dem in das du die .dll "einbindest") das selbe Framework verwendest sollte es keine Probleme geben.

    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Das war der entscheidende Hinweis, danke @Gather, habe für die DLL .NET standard 2.0 verwendet und im Project zum verwenden der dll habe ich .Net 4.5.2 verwendet.

    EDIT: Aber leider Funktioniert das auch nicht, ich verstehe nicht was ich übersehe..
    Wobei das prinzipiell kein Problem sein hätte sollen.
    Die .dll muss lediglich ein niedrigeres Framework aufweisen als das Projekt.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Also DLL erstellen, kopiert auf den desktop (Framework 2.0)

    Neues Project erstellt und Verweis auf die dll auf dem Desktop legen.
    Im Project dann noch imports DIEDLL - Fehler

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30652 Es ist ein Verweis auf die Assembly "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" erforderlich, die den Typ "[Object]" enthält. Fügen Sie dem Projekt einen Verweis hinzu. DLLNutzen C:\Users\USER\source\repos\DLLNutzen\DLLNutzen\Form1.vb 13 Aktiv
    wenn ich mich nicht irre ist .NET Standard nicht gleich .NET
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo, ich mische mich mal ein. wieder :P

    Gather schrieb:

    Die .dll muss lediglich ein niedrigeres Framework aufweisen als das Projekt.

    Kommt immer darauf an, es gibt oft probleme bei der Abwärtskompatiblität. Hier muss man die Projektdatei dann je nach Framework bearbeiten. Ich erläutere das jetzt nicht näher.

    Blackn0va schrieb:

    Neues Project erstellt und Verweis auf die dll auf dem Desktop legen.

    Stelle sicher das im Eigenschaftenfenster des Verweises "Lokale Kopie" aktiviert ist.

    Gather schrieb:

    wenn ich mich nicht irre ist .NET Standard nicht gleich .NET

    Korrekt. Du kannst aber ab .NET 4.6 auf ein .Net Startard Verweisen. Darunter meines Wissens nach nicht!!!

    Allgemein, um das von oben nochmals aufzugreifen.
    Generell wird im Ausgabeverzeichniss, also im Projektverzeichniss (wenn ausgeführt) gesucht!!!
    Wird dort die DLL nicht gefunden wird im GAC (Global Assemby Cache) gesucht.

    Du kannst jeder DLL welche einen "Strong Name" hat (bitte Googeln für Infos) im GAC registrieren. Hierfür gibt des die GACutil.exe welche mit VS mitgeliefert wird bemührt werden kann.
    Aber.... es wird für Produktivsysteme nicht empfohlen!!!

    PS: Bitte nicht mit NGen.exe verwechseln welche die Programmausführung beschleunigt indem ein Image der Assambly erzeugt wird (vorkompilieren).

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Korrekt. Du kannst aber ab .NET 4.6 auf ein .Net Startard Verweisen. Darunter meines Wissens nach nicht!!!
    Exakt, jedoch hat .NET Standard 2.0 APIs die erst mit .NET Framework 4.7.1/2 vollständig unterstützt werden. Alles darunter wirft bei manchen APIs dann NotSupportedExceptions bzw. benötigt zusätzliche Pakete.

    EaranMaleasi schrieb:

    jedoch hat .NET Standard 2.0 APIs die erst mit .NET Framework 4.7.1/2 vollständig unterstützt werden

    Stimmt! Ich wusste da war noch was, deshalb das meines. Ich wusste nicht mehr genau was. Danke für die vervollständigung. :thumbup:

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##