2008-09-16 6 views
5

Mam małą aplikację, która odwołuje się do zestawu Microsoft.SqlServer.Smo (dzięki czemu mogę wyświetlić użytkownikowi listę serwerów & baz danych, do których mogą się podłączyć).Aplikacja odwołująca się do Microsoft.SqlServer.Smo wymaga dodatkowych złożeń, które mają być uwzględnione na docelowym komputerze?

Moja aplikacja pierwotnie odwoływała się do Microsoft.SqlServer.Smo i Microsoft.SqlServer.ConnectionInfo. Rzeczy działały zgodnie z oczekiwaniami na moim polu dev.

Po zainstalowaniu aplikacji na maszynie testowej otrzymałem System.IO.FileNotFoundException. Szczegóły wiadomości obejmowały: Nie można załadować pliku lub zestawu Microsoft.SqlServer.SmoEnum

I ostatecznie rozwiązany przez odniesienie następujące zespoły poza wymienionymi powyżej:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replication

Czy ktoś może potwierdzić, że rzeczywiście trzeba to każdy z tych dodatkowych zespołów w mojej aplikacji (a więc je zainstalować na komputerach użytkownika), mimo że aplikacja buduje dobrze na moim polu rozwoju bez nich odwoływać?

+0

Dzięki za to pytanie, wiele się od niego nauczyłem! – StevenMcD

Odpowiedz

2

Tak, należy je uwzględnić. Na maszynie programującej prawdopodobnie masz zainstalowany program SQL Server, który umieszcza te złożenia w pamięci podręcznej Global Assembly. Kiedy budujesz, Visual Studio pobiera je z GAC. Zakłada się również, że GAC dowolnego komputera, na którym będzie on zainstalowany, również będzie miał te pliki. Jeśli nie, zgłasza wyjątek FileNotFound.

0

Ponieważ linki JIT zespołów zewnętrznych w czasie wykonywania, to pytanie nie można odpowiedzieć bez analizowania kodu i widząc, co nazywasz, a z kolei, co te rozmowy zadzwonić itp

Jeśli chcesz przeanalizuj to sam, najlepiej byłoby odwołać się tylko do zgromadzenia, którego potrzebujesz, a następnie uczyć się od wyjątków i wewnętrznych wyjątków, co się stało.

Inną rzeczą, na którą należy zwrócić uwagę, jest to, dlaczego cztery zgromadzenia, o których wspomniałeś, nie znajdują się w GAC. Wygląda na to, że powinny.

0

Dla mnie ta odpowiedź okazała się nieprawdą. Dodałem powyższe odniesienia, ale bez rozdzielczości. Ostatecznie odkryłem, że potrzebne tylko odniesienie:

Microsoft.SqlServer.Smo

... i następującą uchwałę:

I get a "An attempt was made to load a program with an incorrect format" error on a SQL Server replication project

podsumować, co potrzebne, aby umożliwić mój IIS 6 włączyć 32-bitową aplikację na puli aplikacji IIS. To dlatego, że miałem Win 7 x64, ale zainstalowałem SQL x86. Szkoda, że ​​komunikat o błędzie nie może być bardziej szczegółowy, huh?

+0

Aby kontynuować ... podczas wdrażania do mojego serwera testowego, wystąpił błąd powyżej. Byłem zdziwiony i tak wyglądał w GAC i znalazłem wszystkie wymienione biblioteki DLL. Jednak w katalogu bin mojej aplikacji internetowej zauważyłem, że miałem tylko: Microsoft.SqlServer.BatchParser Microsoft.SqlServer.Replication ... więc usunąłem je i wszystko działało. Uważam, że mój częściowy zbiór zależnych plików powodował, że .net ładował mój częściowy zestaw plików do kosza, a nie z GAC, tak jak powinien. Dlatego wydaje się, że najlepszą praktyką jest nie wdrażanie tych interopcji. – ebol2000

4

Musisz zainstalować dwa pliki MSI na komputerze docelowym, a mianowicie:

1) SQLSysClrTypes.msi [ten jest potrzebny do C# -> SMO GAC]

2) SharedManagementObjects.msi

Dla programu SQL Server 2014 można pobrać te here.

Należy również upewnić się, że wersja jest poprawna. Te dwa pliki można znaleźć przy odrobinie googlowania. W ten sposób nie skopiujesz niczego na lokalny numer &, ale zostaną one usunięte z GAC.

Wiem, że to stare pytanie, ale odpowiedzi nie były zadowalające.

Powiązane problemy