Nie można dodać odniesienia do biblioteki dll

Kiedy dodam a .plik dll jako odniesienie w aplikacji C# pokazuje błąd:

Odniesienie do "....dll " nie można dodać.Upewnij się, że plik jest dostępny i że jest to poprawne zgromadzenie lub COM komponent.

ILDissassembler mówi, że nie ma poprawnego nagłówka CLR, więc próbuję go zarejestrować za pomocą regsvr32 i to daje mi kolejny błąd:

Moduł "" został załadowany, ale wywołanie DLLRegisterServer nie powiodło się z kod błędu "0x80004005"

Używam wersji ultimate VS2010 na 64-bitowym komputerze z systemem Windows 7. W czym może być problem?

Dzięki za wszelkie podpowiedzi / odpowiedzi

Author: osvein, 2010-08-11

15 answers

Zadziałało dla mnie:

Krótka odpowiedź

Uruchom następujący wiersz poleceń (cmd):

TlbImp.exe cvextern.dll        //where cvextern.dll is your dll you want to fix.

I poprawny dll zostanie utworzony dla Ciebie.

Dłuższa ODPOWIEDŹ

  • Otwórz cmd

  • Znajdź TlbImp.exe. Prawdopodobnie znajduje się w C:\Program Files (x86) \ Microsoft SDKs \ Windows \ v7. 0a \ Bin. Jeśli nie możesz go znaleźć, przejdź do folderu głównego (C:\ lub D:) i uruchom:

    dir tlbimp.exe /s              //this will locate the file.
    
  • Uruchom tlbimp.exe i umieść swoje dll za nim. Przykład: jeśli dll jest cvextern.dll. Można uruchomić:

    TlbImp.exe cvextern.dll
    
  • Nowa biblioteka dll została utworzona w tym samym folderze tlbimp.exe. Możesz użyć tego jako odniesienia w swoim projekcie.
 49
Author: Memet Olsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-13 23:35:12

Możesz dodać DLL (lub EXE) do projektu tylko wtedy, gdy jest to.net assembly. Jeśli nie, zobaczysz ten Komunikat o błędzie.

Regsvr32 również przyjmuje pewne założenia dotyczące struktury i wyeksportowanej funkcji w 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 zawiedzie DLL nie dostarcza tych punktów wejścia i DLL nie zawiera komponentu COM.

You only chance for korzystanie z biblioteki DLL jest zaimportować go jak każdy inny non-.NET binarne, np. gdy używasz określonych interfejsów API Win32. Istnieje stary artykuł z magazynu MSDN, który może być pomocny. Zobacz następującą aktualizację, aby uzyskać informacje, gdzie uzyskać artykuł.

Aktualizacja 12 marca 2018: link do magazynu MSDN nie działa już tak, jak kiedyś w sierpniu 2010. Artykuł Jasona Clarka nosi tytuł". NET Column: Calling Win32 DLL in C # with P / Invoke". Został opublikowany w lipcu 2010 roku w magazynie MSDN. Na "Wayback Machine" ma Artykuł tutaj w tej chwili(formatowanie jest ograniczone). Cały numer MSDN Magazine lipiec 2010 jest dostępny tutaj (tylko format HCM, instrukcje obsługi plików HCM tutaj ).

 14
Author: Manfred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 02:30:26

Użyłem dependency walker, aby sprawdzić wewnętrzne odniesienia, które miała dll. Okazało się, że potrzebny był VB runtime msvbvm60.dll i ponieważ mój dev box nie ma zainstalowanego, nie mogłem go zarejestrować za pomocą regsvr32

To wydaje się być odpowiedzią na moje pierwotne pytanie na razie.

 11
Author: user20358,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-11 09:39:47

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 Visual Studio 2012.

Ciągle dostawałem błędy, że Biblioteka dostępu nie jest dostępna, ale wiedziałem, że ją załadowałem.

Podczas debugowania dotarło do mnie, że kompiluję dla 64 bitów, ale mam załadowany Office x86. Mimo że załadowałem bibliotekę Access na 32 bit, nigdy nie był używany przez aplikację... i dlatego nie był dostępny.

Oto czego używałem w C#:

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " + strFilePath+"; Extended Properties= 'Excel 12.0 Xml; HDR = Yes'";

...I was getting an error

Jak tylko przełączyłem kompilator na x86 to działało

 6
Author: Robert Obergfoll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-07 14:42:59

Właśnie natknąłem się na ten problem i po wszystkich wyjaśnieniach dotyczących naprawienia go za pomocą wiersza polecenia odkrył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

 2
Author: JeffB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 20:33:20

Mam ten sam problem z importem Winscarda.dll w moim projekcie. Mam do czynienia z tym importowaniem bezpośrednio z dll w ten sposób:

[DllImport("winscard.dll")]
public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext);

[DllImport("winscard.dll")]
public static extern int SCardReleaseContext(int phContext);

Możesz dodać to do oddzielnego projektu, a następnie dodać odniesienie z głównego projektu.

 2
Author: Sashus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 07:10:31

Nie można dodać odniesienia do natywnego DLL. Możesz jednak włączyć je do rozwiązania (kliknij prawym przyciskiem myszy rozwiązanie, wybierz "Dodaj istniejący plik"), ale nie będą one odwoływane, chyba że zadeklarujesz coś w stylu

[DllImport("...")]
public static extern void MyFunction();

Może istnieje jakiś rodzaj wrapper DLL, do którego się odnosisz i który zawiera import DLL.

Czasami możesz odwołać się do biblioteki DLL wrapper, ale nadal nie możesz uruchomić programu, gdzie sugeruje Cię monit o błąd aby upewnić się, że plik istnieje i wszystkie zależności są dostępne.

Problem polega na tym, że zestaw, który próbujesz dodać, jest przeznaczony i skompilowany tylko dla architektury procesora x86lub x64.

Po prostu spróbuj zmienić docelową platformę na x86 lub x64 w Build -> Configuration Manager .

 1
Author: Leon Wolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 08:16:54

Miałem podobny problem. Próbowałem dodać odniesienie do. Net 2.0 dll do projektu. Net 1.1. Kiedy próbowałem dodać poprzednią wersję .dll, który został spełniony w. Net 1.1. u mnie zadziałało.

 0
Author: user2623151,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 14:23:06

Dla każdego, kto szuka pomocy w tej sprawie, lub doświadcza FileNotFoundException lub FirstChanceException, sprawdź moją odpowiedź tutaj:

Wyjątek pierwszej szansy typu "System. IO. FileNotFoundException" wystąpił w mscorlib.ni.dll -windows phone

Ogólnie rzecz biorąc, musisz być absolutnie pewien, że spełniasz wszystkie wymagania dotyczące odniesienia-wiem, że to oczywista odpowiedź, ale prawdopodobnie przeoczyłeś stosunkowo prostą wymagania.

 0
Author: JHaps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22

Miałem ten problem po ponownym uruchomieniu komputera podczas budowania rozwiązania. Moje dwa referencje zniknęły, więc musiałem przebudować moje dwa projekty ręcznie, a następnie mogłem dodać referencje bez błędu.

 0
Author: Rafal Cypcer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-20 09:55:22

Miałem ten błąd podczas pisania usługi Windows. Uruchamiałem Visual Studio jako Administrator, aby moje polecenia post build automatycznie instalowały moją usługę. Zauważyłem, że kiedy zamknąłem wszystko i uruchomiłem vs normalnie (nie jako Administrator), pozwoliłem mi dodać referencje dobrze bez błędu.

Mam nadzieję, że to rozwiązanie działa dla Ciebie.

 0
Author: Fütemire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 00:35:58

Zwykle w Visual Studio 2015 należy utworzyć projekt dll jako projekt C++ -> CLR z szablonów Visual Studio, ale można go technicznie włączyć po fakcie:

Właściwość critical nazywa się Common Language Runtime Support ustawiona w konfiguracji Twojego projektu. Znajduje się pod Configuration Properties > General > Common Language Runtime Support.

Podczas wykonywania tego zadania, VS prawdopodobnie nie zaktualizuje opcji 'Target. NET Framework' (tak jak powinno). Możesz ręcznie dodać to, rozładowując swój projekt, edytując your_project.plik xxproj oraz dodawanie / aktualizowanie znacznika Target .NET framework Version XML.

Dla przykładu, proponuję stworzenie nowego rozwiązania jako projekt C++ CLR i zbadanie tam XML, być może nawet różnicowanie go, aby upewnić się, że nie ma nic bardzo ważnego, co jest niezwykłe.

 0
Author: Aaron Hull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-20 01:54:16

Musiałem zmienić architekturę na x86 z x64 w configuration manager i skopiować mój 32-bitowy dll (język C-pcProxAPI.dll) do nowego utworzonego folderu.. To jest na górze kroków opisanych przez "Sashus" poniżej.

C:\Projects..\bin\x86 \ Debug

 0
Author: numbtongue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 19:13:35

Moja odpowiedź jest nieco spóźniona, ale jako szybki test upewnij się, że używasz najnowszej wersji bibliotek.

W moim przypadku po aktualizacji biblioteki nuget, która odwoływała się do innej biblioteki powodującej problem, problem zniknął.

 0
Author: Martin Staufcik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-17 15:27:29

Miałem ten sam problem, gdy próbowałem dodać dll, który właśnie zakodowałem. Okazało się, że musiałem ustawić właściwości projektu, z którego pochodzi mój dll:

  • Configuration Properties\General\Common Language Runtime Support: /clr
  • Configuration Properties\C/C++\General\Common Language RunTime Support: /clr

Ponieważ projekt, w którym chciałem użyć tej biblioteki dll był również ustawiony w ten sposób(miał te same właściwości ustawione na /clr).

 0
Author: LoukMo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 15:16:52