Przejdź do treści

DevStyle - Strona Główna
Gdy referencji brak, fuslogvw to the rescue!

Gdy referencji brak, fuslogvw to the rescue!

Maciej Aniserowicz

30 lipca 2012

Backend

Tagi:

    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.

    Zobacz również