Napisałem aplikację, która używa sqlite i działa świetnie na większość systemów. Jest napisany w języku C#, a jedynym nie-ramowym zbiorem jest sqlite, który jest zawarty w System.Data.SQLite.dll.Na niektórych komputerach aplikacja nie może załadować pliku sqlite dll
Rozmieszczam to w taki sam sposób na wszystkich komputerach (kopiowanie wkleja plik exe, plik bazy danych i plik System.Data.SQLite). Działa doskonale na wszystkich moich komputerach i większości komputerów, które wypróbowałem.
Ale wtedy mamy doniesienia, że dla niektórych ludzi rzuca następujący wyjątek:
Nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.65.0, Kultura = neutralny, PublicKeyToken = db937bc2d44ff139 'lub jedną z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie .
Teraz upewniłem się, że plik dll znajduje się w tym samym folderze, co plik aplikacji exe. Jest to ta sama biblioteka dll, o tej samej wersji, co podano w powyższym komunikacie o wyjątku.
Byłem bardzo zdezorientowany przez to, więc stworzyłem świeżą maszynę wirtualną, zainstalowałem na niej Windows 7 i po prostu skopiowałem pliki, i wszystko działało. Więc jeśli działa on w nowych oknach, nie mogę sobie wyobrazić, co inne komputery mogły zaginąć ...
Uwaga: Dwie z tych maszyn, na których projekt zgłasza wyjątek, również korzystają z systemu Windows 7 profesjonalnie.
będę naprawdę wdzięczny za każdą pomoc w tej sprawie, bo jestem świeżo po pomysłów ...
Dziękujemy! Całkowicie przegapiłem, że sqlite.NET ma dwa różne pliki dll - dla x32 i x64. Zmieniłem biblioteki DLL na komputerach, na których nie działa i teraz działa. Nigdy nie myślałem, aby zapytać ich o 32 vs 64-bitowy ... –
Czy istnieje sposób sprawdzenia w czasie wykonywania, jeśli platforma jest 32/64 bitowy i działać odpowiednio w tym przypadku? – Ben
@Ben: Obawiam się, że nie wiem. Musisz dynamicznie załadować bibliotekę DLL sqlite w środowisku wykonawczym, ale nie wiem jak to zrobić w .net. – RichieHindle