Ponownie nie jest mi dane pisać o TPL. Cóż ważne, że dane jest pisać o czymkolwiek technicznym. Dziś będzie o WPFie i dziwnym błędzie, który męczył mnie przez prawie dwa dni. Być może oszczędzi to komuś trudów. Zacznijmy zatem…
Aplikacją oczywiście w WPFie. Jako, że budowałem dla niej instalator postanowiłem sprawdzić czy wszystkie niezbędne komponenty są dołączane. Chciałem oczywiście, aby w przypadku braku .NET instalował się on skorzystałem z rozwiązania podanego przez Bartka Szafko we wpisie Instalowanie komponentów zależnych.
Mój bootstraper wyglądał tak:

   
      False
      .NET Framework 3.5
      true
   

   
      Windows Installer 3.1
   


Pomijając nieistotne elementy…
Instalator się ładnie budował, proces instalacji na czystej wirtualce XP przebiegał bez problemu ale po zainstalowaniu zamiast działającej aplikacji raczył mnie takim o to widokiem:
error
Ciutkę tajemniczę. Kernel32.dll? Hmm…problem potęgował fakt, że inna aplikacja w WPF działała bez najmniejszego zająknięcia. Próbowałem już chyba wszystkiego: wyrzucanie dll’ek (Enterprise Library, SharpZipLib, HtmlAgilityPack), które mogły powodować, że nie mam czegoś zainstalowanego na tej maszynie. Podglądanie pod reflektorem zależności i próba wymyślenia czego może tam brakować. Instalowanie multum pakietów z nadzieją, że może to rozwiąże problem. Nic nie pomagało…
Byłem praktycznie pokonany, ale dziś czytając o wydajności aplikacji w WPF i jak ją możemy zwięksyć natknąłem się na zadanie, iż w 3.5 SP1 dodano do WPF sporo usprawnień. Żółta lampka :). Wiedziałem, że SP1 dodaje trochę nowych rzeczy do WPFa i pomyślałem o tym, jakby się taki błąd gdy użyję czegoś z SP1 a mam zainstalowany tylko .NET 3.5 objawiał. Sprawdziłem i oczywiście mój bootstraper instalował tylko .NET 3.5 bez SP1. Szybko pobrałem SP1 i zainstalowałem, aby sprawdzić….no i udało się. Program wystartował. Eureka.
Oczywiście problemem był ContentStringFormat, który został dodany w SP1 (lub SP3 do .NET 3.0). W WiX’ie oczywiście miałem sprawdzanie zainstalowania tylko .NET 3.5 dlatego instalator działał poprawnie…
Głupi błąd, ale może ten wpis zaoszczędzi komuś cenny czas. Błąd ten jednak powinien być trochę mniej tajemniczy… teraz zostało tylko dołączyć .NET 3.5 SP1 jako Prerequsite z czym też jest trochę problemów, ale przynajmniej wiadomo co robić.