Amikor kell a régi Framework verzió az új mellé

Van egy alkalmazásunk, ami .NET Framework 4.0 Client Profile-t és SQL Server Compact Editiont használ, ClickOnce-szal települ, és ha szükséges, telepíti maga alá a Frameworköt is. Nincs benne semmi olyan, ami miatt ne futhatna régebbi Windowsokon, ami kell is, mert a felhasználóknál részben XP-k vannak. Az új verzió tesztelése közben szokás szerint felhúztam egy friss XP-s virtuális gépet, amire az alkalmazás új verziója sikeresen települt is, azonban az első adatbázis műveletnél az alábbi hibával elszállt:

System.DllNotFoundException: Unable to load DLL ‘sqlceme35.dll’: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

A hivatkozott fájl természetesen ott volt a diszken, ahol a korábbi verziókban is, sőt a program új verziójába nem is kerültek olyan változások, amik ezt a hibát indokolták volna, ezért jogosan merült fel a kérdés, hogy mi változott?

A hiba nem jött elő sem Windows 8.1-en, sem Windows 7-en, sőt még azokon a régebben használt XP-s gépeken sem, amiken fent volt az alkalmazás korábbi verziója, és most csak frissítettük. És bár a korábbi verzió vígan futott XP-n, az új virtuális gépben ugyanolyan hibát produkált, mint az új verzió, így adódott a következtetés, hogy a virtuális gépben volt az eltérés.

Először a modern.ie oldalról letöltött virtuális gépet használtam, és arra gyanakodtam, hogy annak van valami specifikuma. Azután telepítettem egy saját virtuális gépet úgy, hogy az alap XP+SP3 telepítőre hosszú órák alatt keservesen felkínlódtam az összes Windows Update frissítést. A jelenség ugyanaz.

Végül ILSpy-jal belenéztem a programmal települő System.Data.SqlServerCe szerelvénybe, és mivel az még a .NET Framework 2.0 verziójára hivatkozott, próbaként feltelepítettem a régi Framework verziót. Csodák csodája a probléma megoldódott.

Az eset érdekességei:

  • A Windows Update nem telepítette a .NET Framework 2.0-át, csak az újabb verziókat. Ez régebben nem így volt.
  • A 4.0 Client Profile nem volt elég, mellé fel kellett telepíteni a 2.0 verziót.
  • Érthető, hogy Windows 7-en nem jött elő a hiba, hiszen ott az operációs rendszer része a .NET 2.0, de vajon miért ment simán 8.1-en, ahol alapból nincs feltéve a .NET 2.0?

 

Technorati-címkék:

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s