Kiedy dodam plik .dll jako odwołanie w aplikacji C #, pojawia się błąd:
Nie można dodać odniesienia do „.... dll”. Upewnij się, że plik jest dostępny i że jest to poprawny zestaw lub składnik COM.
ILDissassembler mówi, że nie ma prawidłowego nagłówka CLR, więc próbuję go zarejestrować za pomocą regsvr32, co daje mi kolejny błąd:
Moduł „” został załadowany, ale wywołanie DLLRegisterServer nie powiodło się. Kod błędu „0x80004005”
Używam ostatecznej wersji VS2010 na 64-bitowym komputerze z systemem Windows 7. Jaki może być problem?
Dzięki za wszelkie wskazówki / odpowiedzi
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
jakieś sugestie?Bibliotekę DLL (lub EXE) można dodać do projektu tylko wtedy, gdy jest to zestaw .NET. Jeśli tak nie jest, zostanie wyświetlony ten komunikat o błędzie.
regsvr32 przyjmuje również pewne założenia dotyczące struktury i funkcji eksportowanej w bibliotece DLL. Minęło trochę czasu, odkąd go używałem, ale ma to związek z rejestracją serwerów COM, więc pewne punkty wejścia muszą być dostępne. Jeśli regsvr32 nie powiedzie się, biblioteka DLL nie udostępnia tych punktów wejścia, a biblioteka DLL nie zawiera składnika COM.
Jedyną szansą na użycie biblioteki DLL jest zaimportowanie jej jak każdego innego pliku binarnego innego niż .NET, np. Podczas korzystania z niektórych interfejsów API Win32. Istnieje stary artykuł z magazynu MSDN, który może być pomocny. Zobacz następującą aktualizację, aby dowiedzieć się, skąd wziąć artykuł.
Aktualizacja z 12 marca 2018 r .: Odsyłacz do magazynu MSDN nie działa już tak jak w sierpniu 2010 r. Artykuł Jasona Clarka nosi tytuł „Kolumna .NET: wywoływanie bibliotek DLL Win32 w języku C # za pomocą funkcji P / Invoke”. Został opublikowany w lipcowym numerze MSDN Magazine. W „Wayback Maszyna” ma artykuł tutaj w tej chwili (formatowanie jest ograniczona). Cały numer magazynu MSDN z lipca 2010 r. Jest dostępny tutaj (tylko format HCM, instrukcje korzystania z plików HCM tutaj ).
źródło
Użyłem narzędzia Dependency Walker, aby sprawdzić wewnętrzne odwołania dll. Okazuje się, że potrzebował VB runtime msvbvm60.dll, a ponieważ mój programista go nie ma, nie mogłem go zarejestrować za pomocą regsvr32
Na razie wydaje się, że jest to odpowiedź na moje pierwotne pytanie.
źródło
Upewnij się, że Twój kompilator jest ustawiony na x86, jeśli próbujesz odwołać się do biblioteki DLL x86 ...
Miałem podobne problemy ... jak wspomniano powyżej, próbując użyć OLEDB, aby uzyskać dostęp do pliku Excel z mojego kodu C # w programie Visual Studio 2012.
Ciągle otrzymywałem błędy dotyczące niedostępności biblioteki Access, ale wiedziałem, że ją załadowałem.
Podczas debugowania dotarło do mnie, że kompiluję wersję 64-bitową, ale mam załadowany pakiet Office x86. Mimo że załadowałem bibliotekę Access w wersji 32-bitowej, nigdy nie była używana przez aplikację ... i dlatego nie była dostępna.
Oto, czego używałem w C #:
"Dostawca = Microsoft.ACE.OLEDB.12.0; Źródło danych =" + strFilePath + "; Właściwości rozszerzone = 'Excel 12.0 Xml; HDR = Tak'";
... Pojawił się błąd
Jak tylko przełączyłem kompilator na x86, zadziałał
źródło
Właśnie natknąłem się na ten problem i po wszystkich wyjaśnieniach dotyczących naprawiania go za pomocą wiersza polecenia stwierdziłem, że jeśli dodasz go bezpośrednio do projektu, możesz po prostu dołączyć bibliotekę na każdej stronie, która jest potrzebna
źródło
Mam ten sam problem z importowaniem pliku WinSCard.dll do mojego projektu. Radzę sobie z tym importowaniem bezpośrednio z dll w ten sposób:
Możesz dodać to, aby oddzielić projekt, a następnie dodać odniesienie do głównego projektu.
źródło
Miałem ten problem po ponownym uruchomieniu komputera podczas tworzenia rozwiązania. Moje dwa referencje zniknęły, więc musiałem ręcznie przebudować moje dwa projekty, a następnie mogłem dodać referencje bez błędów.
źródło
Nie można dodać odwołania do natywnej biblioteki DLL. Możesz jednak uwzględnić je w rozwiązaniu (rozwiązanie kliknij prawym przyciskiem myszy, wybierz "Dodaj istniejący plik"), ale nie będą się do nich odwoływać, chyba że zadeklarujesz coś takiego
Może jest jakiś rodzaj opakowania biblioteki DLL, do której faktycznie się odwołujesz i która zawiera import DLL.
Czasami możesz odwołać się do otoki DLL, ale nadal nie możesz uruchomić programu, gdy monit o błąd sugeruje, aby upewnić się, że plik istnieje, a wszystkie zależności są dostępne.
Ten problem jest spowodowany tym, że zestaw, który próbujesz dodać, jest przeznaczony i skompilowany tylko dla architektury procesora x86 lub x64 .
Po prostu spróbuj zmienić platformę docelową na x86 lub x64 w Build -> Configuration Manager .
źródło
Musiałem zmienić architekturę na x86 z x64 w menedżerze konfiguracji i skopiować moją 32-bitową bibliotekę dll (język C - pcProxAPI.dll) do nowego folderu, który został utworzony .. To jest na szczycie kroków opisanych poniżej przez "Sashus" .
C: \ Projekty .. \ bin \ x86 \ Debug
źródło
Miałem ten sam problem, kiedy próbowałem dodać bibliotekę DLL, którą właśnie zakodowałem w C ++ do mojego nowego projektu C #. Okazało się, że muszę ustawić właściwości projektu C ++, z którego pochodzi moja dll:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Ponieważ projekt C #, w którym chciałem użyć tej biblioteki dll, został również ustawiony w ten sposób (miał ustawione te same właściwości
/clr
).źródło
Miałem podobny problem. Próbowałem dodać odniesienie do biblioteki dll .net 2.0 do projektu .Net 1.1. Kiedy próbowałem dodać poprzednią wersję .dll, która była zgodna z .Net 1.1. to działało dla mnie.
źródło
Dla każdego, kto szuka pomocy w tej sprawie lub ma wyjątek FileNotFoundException lub FirstChanceException, sprawdź moją odpowiedź tutaj:
Wystąpił wyjątek pierwszej szansy typu „System.IO.FileNotFoundException” w pliku mscorlib.ni.dll - Windows Phone
Ogólnie rzecz biorąc, musisz mieć absolutną pewność, że spełniasz wszystkie wymagania dotyczące tworzenia odniesienia - wiem, że to oczywista odpowiedź, ale prawdopodobnie przeoczysz stosunkowo prosty wymóg.
źródło
Wystąpił ten błąd podczas pisania usługi systemu Windows. Używałem programu Visual Studio jako administrator, aby moje polecenia po kompilacji automatycznie instalowały moją usługę. Zauważyłem, że kiedy zamknąłem wszystko i uruchomiłem VS normalnie (nie jako administrator), pozwolił mi dodać odniesienia dobrze, bez błędów.
Mam nadzieję, że to rozwiązanie działa dla Ciebie.
źródło
Zwykle w Visual Studio 2015 powinieneś utworzyć projekt dll jako projekt C ++ -> CLR z szablonów Visual Studio, ale możesz technicznie włączyć go po fakcie:
Właściwość krytyczna nosi nazwę
Common Language Runtime Support
set w konfiguracji projektu. Znajduje się podConfiguration Properties > General > Common Language Runtime Support
.Robiąc to, VS prawdopodobnie nie zaktualizuje opcji „Docelowy .NET Framework” (tak jak powinno). Możesz to dodać ręcznie, zwalniając projekt, edytując plik your_project.xxproj i dodając / aktualizując
Target .NET framework Version
znacznik XML.Na przykład proponuję utworzenie nowego rozwiązania jako projekt C ++ CLR i zbadanie tam XML-a, być może nawet porównanie go, aby upewnić się, że nie ma nic bardzo ważnego, co jest niezwykłe.
źródło
Moja odpowiedź jest trochę spóźniona, ale w ramach szybkiego testu upewnij się, że korzystasz z najnowszej wersji bibliotek.
W moim przypadku po zaktualizowaniu biblioteki nuget, która odwoływała się do innej biblioteki powodującej problem, problem zniknął.
źródło
Możesz dodać plik .dll ręcznie. Na przykład, jeśli chcesz dodać plik dll w aplikacji WPF i nie możesz odnieść się do niego w projekcie
(Błąd podczas wyświetlania: nie można dodać odwołania do „.... dll”. Upewnij się, że plik jest dostępny i że jest to poprawny zestaw lub komponent COM),
następnie SKOPIUJ ten plik dll i WKLEJ W PROJEKCIE INSTALATORA (w folderze aplikacji).
źródło
źródło