2016-05-05 3 views
0

Problem Ich habe eine statische (Erweiterungsmethode), die in meinem VSIX-Projekt referenziert wird. Wenn ich das VSIX-Projekt kompiliere, kann ich die DLL im bin/debug-Ordner zusammen mit der VSIX-DLL (Gleicher Ordner) sehen.VSIX kann in einer anderen DLL keine statische Methode finden

Darüber hinaus hat Intellisense keine Probleme damit und kompiliert auch nicht! Wenn ich das VSIX-Projekt im Debug-Modus laufe. Ich sehe diesen Fehler:

„Method nicht gefunden " System.String Method (System.String)", die das Verlängerungsverfahren in einer anderen Baugruppe (in der bin/debug folder)

I‘ ve lesen Sie andere Beiträge wie diese:

Can't find VSIX dlls with DllImport

Include external .dll in Visual Studio Extension

Beide Lösungen nicht richtig zu mir schauen, nachdem alle, die dLL in der richtigen folde ist r, es findet seinen eigenen Code, aber nicht die andere Assembly .... Die Verweise und die Verwendung von Anweisungen und Intellisense arbeiten!

Das sagt mir, dass es ein Loader-Problem ist, irgendwie VSIX Projekte können andere referenzierte Assemblys nicht laden oder vielleicht ist es von Entwurf.

Ich habe versucht, sie als Assets zu laden, aber sie sind nicht "andere" VSIX-Projekte, so dass alle Asset-Optionen aus sind.

enter image description here

Hinweis jedoch, dass diese Asset-Typen sind alle mit Microsoft.VisualStudio vorangestellt. Ich habe versucht, Microsoft.VisualStudio.Assembly und sie funktionieren nicht, in der Tat wird das Manifest versuchend, dies zu tun.

Eine weitere Kuriosität, ich habe einen Verweis auf eine andere Baugruppe, die als EXE kommt. Alle diese Methoden funktionieren gut. Es sind nur die DLLs, die nicht geladen werden. Für diese kann ich keine USING-Anweisung verwenden, sondern muss den vollqualifizierten NameSpace-Namen verwenden, um es zum Laufen zu bringen ... Aber wenn ich den gleichen Trick an den DLLs versuche, funktioniert es nicht.

Ein Beitrag vorgeschlagen, um die Baugruppen manuell in die Manifest-Datei hinzufügen ... aber das Post war im Jahr 2010

Das funktioniert auch nicht:

Um Satelliten-DLLs von referenzierten Assemblys im Include VSIX-Paket, fügen Sie SatelliteDllsProjectOutputGroup den Ausgabegruppen hinzu, die in der VSIX-Eigenschaft enthalten sind.

Was fehlt mir?

Antwort

0

Die Ursache dieses Problems liegt darin, dass VSIX standardmäßig alles als "Stark" bezeichnet. Ich hatte diese Option aufgrund von Drittanbieter-DLLs deaktiviert, die nicht signiert waren. Ich konnte die Quelle und den "starken Namen" bekommen.

Ich habe dann stark das VSIX-Projekt genannt und alles hat funktioniert.

Zum Eigenschaftenseite des Projekts:

enter image description here

Ich begann in Tools wie diese suchen, die kann starken Namen DLLs, wenn der Quellcode nicht erreichbar ist.

https://brutaldev.com/post/net-assembly-strong-name-signer