Laden...

SQL Server Management Objects; Kann DLL nicht finden.

Erstellt von Spinalkanal vor einem Jahr Letzter Beitrag vor einem Jahr 722 Views
S
Spinalkanal Themenstarter:in
3 Beiträge seit 2022
vor einem Jahr
SQL Server Management Objects; Kann DLL nicht finden.

Hallo zusammen,

derzeit erstelle ich eine Anwendung für einen Zugiff auf einen Microsoft SQL Server 2016. Hierbei geht es Views, Stored Procedure, Loggin etc., also um Verwaltungsaufgaben und weniger um Abfragen von Tabellen im klassischen Sinne. Dazu greife ich erstmalig auf die SQL Server Management Objects (SMO) zu. Hierbei gesellt sich leider das Problem der durch VS nicht auffindbaren Objekten.

In einem Projekt Klassenbibliothek (.NET Framework) 4.7.2 habe ich über Nuget die Microsoft.SqlServer.SqlManagementObjects installiert und im Nachgang die Aktualisierung durchgeführt. Mit einer kleinen SMO Kennenlernklasse stoße ich umgehend auf folgende Meldung:

Fehlermeldung:
System.IO.FileLoadException: "Die Datei oder Assembly "Microsoft.Data.SqlClient, Version=3.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)"

VS zeigt mir an, dass die Assembly Microsoft.Data.SqlClient in der Version 4.1.0 installiert sei, was mir der Windows Explorer in \bin\Debug bestätigt.
In der Fehlermeldung wird auf dem Assemblyverweis hingewiesen. Ich kann aber partout nicht so eine Datei mit dem entsprechenden Eintrag finden.

Installiere ich SMO über Nuget direkt in einem WPF - App Projekt (.NET Framework) 4.7.2, funktioniert es einwandfrei. Mir ist dabei aufgefallen, dass die Solution des Projekts Klassenbibliothek unter Verweise viele Assemblies mit einem Nuget Logo kennzeichnet, und unter Eigenschaften keine Daten anzeigt werden. Bei dem WPF-Projekt ist dieses nicht der Fall.
Vermutlich liegt hier ein Zusammenhang. Wie bekomme ich dieses gelöst?

Der Abrufcode ist wie hier exemplarisch gezeigt simple.


public class Testclass
{
        private List<string> GetDatabaseName()
        {
            List<string> result = new List<string>();
            var srv = new Server();
            srv.ConnectionContext.LoginSecure = false;
            srv.ConnectionContext.Login = "UserXY";
            srv.ConnectionContext.ServerInstance = @"IP_XY";
            srv.ConnectionContext.Password = "xxxxxxxx";

            foreach (Database db in srv.Databases)
            {
                result.Add(db.Name);
            }

               return result;
}

Gruß

16.840 Beiträge seit 2008
vor einem Jahr
  1. Ich hab ein Projekt erstellt mit WPF .NET Framework 4.7.2
  2. Danach das Paket https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects in der Version 161.47008.0, das https://www.nuget.org/packages/Microsoft.Data.SqlClient in der Version 3.0.0 mitbringt, installiert.
  3. Danach hab ich das Paket https://www.nuget.org/packages/Microsoft.Data.SqlClient auf die Version 4.1.0 aktualisiert.

Gleiches wiederholt mit der Class Library NET FX4.7.2.
Funktioniert einwandfrei.

Vermute, dass Dein Fehler wo anders ist.
Siehe auch [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden

Hinweis:
.NET Framework 4.7.2 ist völlig veraltet, viele NuGet Pakete gibt es für .NET Framework 4.x schon gar nicht mehr, sondern nur .NET 5 und aufwärts.

Edit, was mich stutzig macht.

Mir ist dabei aufgefallen, dass die Solution des Projekts Klassenbibliothek unter Verweise viele Assemblies mit einem Nuget Logo kennzeichnet, und unter Eigenschaften keine Daten anzeigt werden. Bei dem WPF-Projekt ist dieses nicht der Fall.

Bei .NET Framework Projekten, egal ob WPF oder Class Library, zeigt Visual Studio (zumindest 2022) keine NuGet Logos an.
Bei .NET Core und .NET 5 (und höher) spricht Visual Studio von Dependencies und listet Pakete auf.
In der alten Welt, .NET Framework 4 und früher, spricht Visual Studio von References und listet Assemblies auf.

Assemblies sind keine Pakete und werden auch nirgends mit dem Logo versehen.
Das passt also nicht zur Aussage, dass Du eine Class Library 4.7.2 hast.

S
Spinalkanal Themenstarter:in
3 Beiträge seit 2022
vor einem Jahr

Hallo Abt,

ich habe nochmal nachgeschaut. Zielframework 4.7.2.
Erneut ein neues Projekt als Klassenbibliothek (.NET Framework) 4.7.2 eingerichtet. Eine Klasse mit einer Methode, deren Inhalt sich gerade mal auf eine Server srv = new Server(); --Zeile beläuft. Ich habe dieses mal die beiden Pakete über die Paket-Manager-Konsole installiert. Waren ungewöhnlich schnell durch und eine menge Assemblies wurden gar nicht installiert. Das Ergebnis ist das gleiche. Nuget Icon statt Assembly Symbol und die gleiche Fehlermeldung. In einer WPF-APP direkt installiert, alles fein. Verwendetes VS: 2022.

4.7.2 und 4.8 laufen in einer aus produktionsgründen geschützen Umgebung. .NET Core ist dort in weiter Ferne.

16.840 Beiträge seit 2008
vor einem Jahr

Waren ungewöhnlich schnell durch und eine menge Assemblies wurden gar nicht installiert. Das Ergebnis ist das gleiche.

Wie soll das Ergebnis das gleiche sein, wenn Assemblies (ich glaube Du meinst Pakete..?) nicht installiert wurden.

Woher die Annahme, dass die Pakete nicht installiert wurden; weil es so schnell ging?
Da sollte man wissen, wie NuGet funktioniert: es gibt einen lokalen NuGet Package Cache in Deinem Benutzerprofil, sodass Pakete nur ein mal von NuGet.org heruntergeladen werden müssen und sonst der Cache verwendet wird. Geht also rasend schnell, wenn alle Pakete sich bereits auf dem Rechner befinden.
How to manage the global packages, cache, temp folders in NuGet
-> Spart Zeit und Traffic.
Also nochmal, woher die Annahmen: gibts Fehlermeldungen, bei der Installation?

Wie gesagt: ich hab Dein Projekt 1:1 wie Du es beschrieben hast nachgestellt.
Beide Fälle funktionieren.

Die Fehlermeldung ist wirklich üblich dafür, dass Du einen Fehler bei der Referenzierung Deiner Abhängigkeiten (sei es nun Pakete oder Assemblies) gemacht hast; kann aber auch dadurch entstehen, dass Du inkompatible Abhängigkeiten hast (zB. falscher Projekttyp).
Lad mal Dein Projekt als Anhang hoch (bitte ohne bin/obj Folder).

4.7.2 und 4.8 laufen in einer aus produktionsgründen geschützen Umgebung. .NET Core ist dort in weiter Ferne.

Alles eine Frage der Politik. Bin auch seit >15 Jahren im Maschinenbau und Produktion tätig...

S
Spinalkanal Themenstarter:in
3 Beiträge seit 2022
vor einem Jahr

Guten Morgen,

bei der Erstellung des Testprojektes zum Hochladen viel mir auf, dass nach der Installation von SMO
nicht mehr eine Menge Assemblies zusätzlich in der Solution unter Verweise eingebunden werden.
Das blaue Icon bleibt.
Das wichtigste, es funktioniert!

Also flugs rüber in das eigentliche Projekt und siehe da, alles läuft jetzt auf anhieb.
Das einzige was ich gerstern noch gemacht habe, war, dass ich über die Paket-Manager-Konsole SMO installiert habe
und nicht über Verweise => Nuget- Pakete verwalten...
Vermutlich wird es darin keinen Unterschied geben und auch nicht der Grund sein. Jetzt funktioniert es (warum auch immer).

Vielen Dank für Deine Hilfe!