Wie wird eine DLL-Auslastung von der eingebetteten Ressource verwendet?

9

Ich habe eine DLL & gt; & gt; System.Data.SQLite.dll

Um es auf eine normale Weise zu verwenden & gt; füge es einfach als Referenz hinzu und

%Vor%

Dann kann ich alle Funktionen innerhalb dieser DLL verwenden.

Aber möchte ich meine app.exe und diese DLL in einer einzigen Datei zusammenführen. Ich habe versucht, ILmerge zu verwenden, scheitere jedoch nicht. Wie ich weiß, kann ILmerge die Unmanage-DLL nicht zusammenführen.

Also, ich habe eine andere Methode ausprobiert & gt; Machen Sie die DLL als eingebettete Ressource. Ich kann es als eine Baugruppe mit dem folgenden Code laden:

%Vor%

aber, wie soll ich die Funktionen in SQLiteDLL verwenden?

Ich habe auch versucht, die DLL als Ressource in Eigenschaften hinzuzufügen und sie so zu laden:

%Vor%

Das oben erklärte, was ich bisher habe und ich weiß nicht, was ich als nächstes tun soll, um die DLL zu benutzen? Ich kann immer noch nicht die Funktionen innerhalb der DLL verwenden.

Zum Beispiel, wenn ich folgendes eintippe:

%Vor%

Das Visual Studio sagt:

Fehler 21 Der Typ oder Namespace-Name 'SQLiteCommand' konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assembly-Referenz?)

Können Sie Ihre Erkenntnisse teilen? Danke.

    
alont 10.02.2012, 13:20
quelle

2 Antworten

4

Sie können eine Baugruppe einbetten UND gleichzeitig (in VS) referenzieren ... für die Art, wie Sie sie verwenden möchten, müssen Sie darauf verweisen! Gibt es einen Grund, warum Sie nicht auf die Versammlung verweisen?

Die Verwendung eines Typs aus einer eingebetteten Assembly (verwaltet) ohne Referenzierung ist etwas schwieriger, aber mit Reflection usw. möglich - siehe diese Links (sie enthalten Referenzmaterial UND einige Beispielcodes etc.):

Beim Einbetten von verwalteten DLLs haben Sie mehrere Möglichkeiten:

ODER

  • Verwenden Sie ein Tool wie SmartAssembly (kommerziell)
    es kann unter anderem eingebettet werden und verschmelzen (keine Notwendigkeit, Ihren Quellcode zu ändern)

ODER

  • Code selbst in weniger als 10 Zeilen (freier, aber minimaler Quelltextwechsel)
    Markieren Sie alle benötigten Abhängigkeiten als "eingebettete Ressource" - auf diese Weise sind sie in der EXE-Datei enthalten ... Sie müssen ein AssemblyResolve -Handler, der zur Laufzeit aus Resources liest und die benötigten DLLs an die .NET-Runtime zurückgibt ...
Yahia 13.02.2012, 12:12
quelle
0

Dies ist keine Methode, um in AppDomain geladene Assemblys zu verwenden. Lesen Sie diesen Artikel: Vorgehensweise: Laden von Assemblys in eine Anwendungsdomäne

Kurz gesagt sollten Sie GetMethod () mit dem Methodennamen (zum Beispiel SqlCommand) aufrufen und dann über die .Invoke () Methode aufrufen.

    
Jasper 13.02.2012 12:04
quelle

Tags und Links