To pytanie odnosi się do strony internetowej ASP.NET, pierwotnie opracowany w VS 2005 i teraz w VS 2008.Niezarządzane DLL nie można załadować na serwer ASP.NET
Ta strona używa dwóch niezarządzanych DLL zewnętrznych, które nie są .NET i nie mam kodu źródłowego, aby je skompilować i używać ich tak, jak jest.
Ta strona działa poprawnie z poziomu Visual Studio, znajdując i uzyskując dostęp do zewnętrznych bibliotek DLL. Jednak, gdy strona jest na serwerze internetowym opublikował (runnning IIS6 i ASP.NET 2.0) zamiast komputera rozwoju nie może zlokalizować i dostęp do tych zewnętrznych bibliotek DLL, i pojawia się następujący błąd:
Unable to load DLL 'XYZ.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
zewnętrzne biblioteki DLL znajdują się w katalogu bin witryny, wraz z zarządzanymi bibliotekami DLL, które je zawijają, oraz wszystkimi innymi bibliotekami DLL witryny.
Poszukiwanie tego problemu ujawnia, że wiele osób ma ten sam problem z dostępem do zewnętrznych bibliotek DLL innych niż .NET ze stron ASP.NET, ale nie znalazłem rozwiązania, które działa.
Próbowałem następujące:
- Bieg zależy sprawdzi zależności ustalić, że pierwsze trzy są w katalogu System32 w ścieżce, ostatnia jest w .NET 2 ram.
- Umieściłem dwie biblioteki DLL i ich zależności w System32 i zrestartowałem serwer, ale strona internetowa nadal nie mogła załadować tych zewnętrznych bibliotek DLL.
- Użytkownik uzyskał pełne prawa do ASPNET, IIS_WPG i IUSR (dla tego serwera) do katalogu bin witryny i zrestartował, ale strona internetowa nadal nie mogła załadować tych zewnętrznych bibliotek DLL na adres .
- Dodano zewnętrzne biblioteki DLL jako istniejące elementy do projektów i ustawiono ich właściwość "Kopiuj na wyjście" na "Kopiuj zawsze", a strona internetowa nadal nie może znaleźć plików DLL.
- Ustaw również ich właściwość "Kompilacja działania" na "Zasób osadzony", a strona internetowa nadal nie może znaleźć plików DLL.
Każda pomoc z tym problemem byłaby bardzo ceniona!
Oto odpowiedź bez potrzeby zanieczyszczania folderu system32: http://stackoverflow.com/a/4598747/92756 –
zamiast tego, możesz wyłączyć ShadowCopying przez dodanie < hostingEnvironment shadowCopyBinAssemblies = "false" /> na web.config, pod warunkiem, że nie modyfikujesz plików binarnych w aplikacji na żywo. – Amit
Zostałem spalony przez zrobienie kopii mojej biblioteki DLL i umieszczenie jej w System32, ponieważ zapomniałem o niej, a następnie załadowałem nieprawidłową wersję Microsoft.Azure.Documents.ServiceInterop.dll dla mojego projektu, co zaowocowało dziwnymi lokalnymi zapytaniami [0] .isMinInclusive błędy podczas próby połączenia z bazą danych.Moja poprawka polegała na tym, aby upewnić się, że moja lokalna tożsamość IIS DefaultAppPool była moim lokalnym użytkownikiem. Zobacz także: https://github.com/Azure/azure-documentdb-dotnet/issues/267 – Zachstronaut