fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
3 minut

Gdy referencji brak, fuslogvw to the rescue!


30.07.2012

Piszemy aplikację. Uruchamiamy. Działa. Wysyłamy do klienta. Uruchamia. Nie działa.

Znamy to wszyscy, prawda?

Powodów może być oczywiście bez liku, od specyficznej konfiguracji konkretnej maszyny po naszą głupotę. Niekiedy jednak problem jest prozaiczny – aplikacja nie może skorzystać z wymaganych dllek!

Nie zawsze (a raczej: nigdy?) to co dodajemy bezpośrednio do referencji rozwiązania jest wystarczające do poprawnego działania aplikacji. Strasznie łamałem sobie kiedyś głowę nad takim scenariuszem, aż wreszcie znalazłem piękne narzędzie Fusion Log Viewer / fuslogvw / Assembly Binding Log Viewer. Jak zwał tak zwał, do pobrania stąd: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx.

Ten mały sprytny tool wyłapuje wszystkie problemy z ładowaniem wymaganych przez aplikację dllek i loguje je. Z informacjami niezbędnymi do ich rozwiązania.

Ściągamy fuslogvw, uruchamiamy i włączmy logowanie: "Settings" -> "Log bind failures to disk". Czekamy na wystąpienie błędu. Wciskamy "Refresh". Klikamy na błędzie i w przeglądarce uzyskujemy pełen raport.

Będąc w posiadaniu takich informacji (które nam podeśle grzeczny klient) możemy rozprawić się z niechcianą sytuacją.

Przykładowy raport poniżej (zwróćcie uwagę na datę – tyle czasu ten post czekał na uzupełnienie i publikację:)). Dodam, że wyjątki rzucane przez aplikację nijak nie wskazywały na problem z tą dllką.

 

*** Assembly Binder Log Entry  (3/15/2011 @ 1:31:36 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll
Running under executable  C:\Source\Applications\MyApp\bin\MyApp.exe
— A detailed error log follows.
=== Pre-bind state information ===
LOG: User = WIN2008\Administrator
LOG: DisplayName = Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Source/Applications/MyApp/bin/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Source\Applications\MyApp\bin\.exe.Config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Post-policy reference: Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Source/Applications/MyApp/bin/Microsoft.Practices.ServiceLocation.DLL.
LOG: Attempting download of new URL file:///C:/Source/Applications/MyApp/bin/Microsoft.Practices.ServiceLocation/Microsoft.Practices.ServiceLocation.DLL.
LOG: Attempting download of new URL file:///C:/Source/Applications/MyApp/bin/Microsoft.Practices.ServiceLocation.EXE.
LOG: Attempting download of new URL file:///C:/Source/Applications/MyApp/bin/Microsoft.Practices.ServiceLocation/Microsoft.Practices.ServiceLocation.EXE.
LOG: All probing URLs attempted and failed.

0 0 votes
Article Rating
3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
kowal
kowal
12 years ago

it's beautiful.

:* 4 u

matma
matma
12 years ago

Akurat dzisiaj pierwszy raz od dawien dawna robię coś do czego to narzędzie jest idealne. Dzięki wielkie za publikację !!

procent
12 years ago

No to się cieszę:)

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również