2010-06-07 6 views
9

Mam dll C++/cli, które ładuję w czasie wykonywania i który działa świetnie w trybie debugowania. Jeśli spróbuję załadować bibliotekę dll w trybie zwolnienia, nie załaduje się, informując, że brakuje jednej lub więcej zależności. Jeśli uruchomię zależy od tego, brakuje mi MSVCR90.DLL z MSVCM90.DLL. Jeśli sprawdzę wersję debugowania biblioteki dll, ma ona również brakującą zależność, ale przeciw wersji debug (D).C++/CLI Brakujące MSVCR90.DLL

Upewniłem się, że debugowanie/zwolnienie osadza plik manifestu. Czytałem coś o problemach z aplikacją ładującą bibliotekę dll budowaną jako Dowolny procesor i bibliotekę dll budowaną jako x86, ale nie wiem jak ustawić oba na x86.

Używam VS2010.

W każdym razie, od jakiegoś czasu mam problemy i nie mam pojęcia, co jest nie tak. Jestem pewien, że ktoś tam wie, co się dzieje. Daj mi znać, jeśli muszę podać dodatkowe informacje.

alt text http://www.freeimagehosting.net/uploads/fb31c0e256.png

UPDATE:

To okazało się być rozdzielczość do mojego problemu: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827

+0

Może twoje ustawienia właściwości projektu są niepoprawne, ustaw tylko w następujący sposób: C++/Generowanie kodu/biblioteka środowiska wykonawczego // MdD – ashiontang

Odpowiedz

10

MSVCR90 jest środowisko wykonawcze dla programu Visual Studio . Jeśli uruchamiasz aplikację na swoim komputerze programistycznym, powinieneś mieć zainstalowane środowiska wykonawcze debugowania i wydania (w ramach Visual Studio), ale możliwe jest, że coś poszło nie tak z instalacją, lub że VS2010 w rzeczywistości nie zawiera starszych środowiska wykonawcze. Jeśli próbujesz uruchomić wersję na innym komputerze, to po prostu wymaga zainstalowanego środowiska wykonawczego.

Tak czy inaczej, być może uda się go naprawić, instalując Visual Studio 2008 redistributable - ale upewnij się, że pobierasz odpowiedni plik na swój komputer (x86 lub x64).

W poprzednich wersjach VS potrzebowałeś środowiska uruchomieniowego dla wersji, z którą się kompilowałeś, więc jeśli VS2010 podąża za tym precedensem, potrzebujesz MSVCR100, a nie MSVCR90 - co sugeruje, że możesz nie zrekompilować biblioteki dll za pomocą VS2010 - może to być inne podejście, aby uruchomić go na swoim komputerze (korzystając z redycji, która jest w instalacji VS2010), ale uważaj, że nadal będziesz potrzebować innych użytkowników do zainstalowania odpowiedniego (VS2010) redystrybucji na swoim komputerze.

Jeśli chodzi o "Dowolny procesor" w porównaniu z "x86", jest to problem tylko na 64-bitowym komputerze. W tych systemach aplikacja 64-bitowa nie może łączyć się dynamicznie z 32-bitowymi bibliotekami dll. Jeśli skompilujesz swoją aplikację jako "Dowolny procesor", to JIT zostanie skompilowany jako 64-bitowy w 64-bitowym systemie operacyjnym, więc zawiesi się, jeśli spróbuje wywołać bezpośrednio 32-bitowe biblioteki dll. Rozwiązaniem jest zbudowanie aplikacji "x86", ponieważ zmusza kompilator JIT do wygenerowania 32-bitowego kodu (nawet na maszynie 64-bitowej), a tym samym zapewnia kompatybilność z dll, którą chcesz wywołać. Jeśli biblioteka DLL jest zarządzanym zbiorem, możesz użyć dowolnego procesora zarówno w aplikacji dll, jak i obie będą JITted do tego samego formatu.

+0

To jest na moim dev polu i celuję w .net 3.5 z VS2010, który kończy się przy użyciu VS2008 do kompilacji.Nie jestem pewien, czy to nie jest dziwactwo. Prawidłowe jest, że używa 90 wersji biblioteki DLL. –

+0

To była odpowiedź na moje pytanie, ale nie rozwiązałem mojego problemu. Nadal nie wiem, co jest nie tak z moim środowiskiem programisty, ale nie mogę załadować tych bibliotek dll w trybie zwolnienia. Działają dobrze na innych komputerach z zainstalowanym CRT vC++ runtime. –

+0

@Mitch. Przykro mi to słyszeć. Wszystko, co mogę zasugerować, to spróbować (ponownie) zainstalować pakiet redyst na twoim komputerze (biblioteki DLL są zawarte w instalacji Visual Studio, ale tak naprawdę nie instalują pakietu redist, więc jest nieco inny niż na komputer użytkownika) - jeśli to nie działa, jedyne, co mogę wymyślić, to ponowne zainstalowanie programu Visual Studio. To nie brzmi jak problem z twoją kompilacją, ponieważ mówisz, że działa dobrze na innych komputerach - więc to zdecydowanie coś na temat twojego komputera, który jest inny. –

1

Zdarzyło mi się coś podobnego, uruchamiając stronę internetową w Vistual Studio 2012, po migracji z Visual Studio 2010. Komunikat o błędzie informował, że brakuje MSVCR90.DLL. Rozwiązanie: 1) Usuń folder _bindeployable znajdujący się na ścieżce projektu. 2) Przebuduj.

Mam nadzieję, że to pomaga.