2017-10-11 2 views
1

Ich schrieb eine SQL CLR-Funktion in C#, die eine Abhängigkeit (zu npgsql.dll) hat. Wenn es in der Vergangenheit keine Abhängigkeit gab, kann ich es problemlos als neue Assembly in SQL Server hinzufügen - aber jetzt kann ich es nicht mehr machen.Laden Sie Clr-DLL von Drittanbietern in SQL Server

ich diesen Fehler:

Msg 10301, Level 16, State 1, Line 17
Assembly 'Database1' references assembly 'system.directoryservices, version=4.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2 (The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

Edited: Dieses Problem ist nicht nur mit 'System.DirectoryServices', so dass, wenn ich einen anderen npgsql.dll verwende ich Fehler erhalten folgende statt:

Msg 10301, Level 16, State 1, Line 20 Assembly 'Database1' references assembly 'system.threading.tasks.extensions, version=4.1.0.0, culture=neutral, publickeytoken=cc7b13ffcd2ddd51.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

und alle versuchen, diese Bibliothek zu GAC mit Developer Command Prompt hinzuzufügen, funktioniert nicht.

+0

Welcher Teil von ** was nicht vorhanden ist ...... ** verstehst du nicht ?? Diese DLL, auf die Sie verweisen, ist in der SQL Server .NET-Umgebung nicht vorhanden. Wenn Sie sie benötigen, müssen Sie sie laden und SQL Server ** hinzufügen, bevor Sie eine eigene Assembly laden. –

+1

Unter normalen Umständen wird eine Assembly wie 'System.DirectoryServices' vom GAC geladen. In SQL Server gelten diese Umstände nicht. Es verfügt über eine eigene Logik zum Laden von Assemblys und ignoriert den GAC, mit Ausnahme einer kleinen Liste von zulässigen Whitelist-Assemblys, von denen "System.DirectoryServices" nicht zulässig ist. Es (und seine Abhängigkeiten wiederum) muss der Assembly-Sammlung von SQL Server explizit hinzugefügt werden, bevor es verwendbar ist. Anscheinend haben frühere Versionen der Baugruppen, die Sie bereits haben, einfach nicht darauf Bezug genommen. –

+0

Danke für deine Hilfe @Jeroen Mostert. Ich versuche, 'System.DirectoryServices' in GAC hinzuzufügen, dafür finde ich diese DLL im .net Pfad und benutze die Developer Command Prompt. Aber wieder habe ich den gleichen Fehler. Liegt es an meiner Version? Wenn ja, wie kann ich es beheben? –

Antwort

1

Diese Frage wurde bereits mehrfach hier gestellt und beantwortet. Aber, anstatt nur dies als ein Duplikat, etwas muss zuerst gesagt werden:

Bevor Sie die DirectoryServices DLL in SQL Server (eine Aktion, die ein gewisses Maß an Risiko hat) importieren, stellen Sie sicher, dass Sie tatsächlich können Diese Funktionalität können Sie auf keine andere Weise nutzen. Zum Beispiel:

C# clr udf for Active Directory group membership

Ansonsten schau mal hier:

How to register System.DirectoryServices for use in SQL CLR User Functions?

Das "reparieren" gibt es TRUSTWORTHY, zu ermöglichen, die von einer Strecke nicht eine gute Option ist, aber es ist der übliche Weg, um nicht unterstützte .NET Framework-Bibliotheken zu laden. Ich arbeite an einem anderen Mittel, das bisher gut aussieht und keine TRUSTWORTHY erfordert, aber ich muss noch ein wenig mehr testen, bevor ich es empfehlen kann. Ich werde das später mit dieser Information aktualisieren, sobald ich Zeit habe, es vollständig zu testen und zu dokumentieren.

Verwandte Themen