DLL-helvetti (DLL-painajainen, kirjaimellisesti: DLL -helvetti) on umpikuja, joka liittyy dynaamisten DLL -tiedostojen hallintaan Microsoft Windows -käyttöjärjestelmässä .
Samanlainen ongelma muissa käyttöjärjestelmissä on nimeltään riippuvuushelvetti .
Ongelman ydin on tiettyjä toimintoja tukevien DLL-versioiden ristiriita. DLL-helvetti on esimerkki huonosta ohjelmointikonseptista, joka, kuten piilotettu kaivos, johtaa jyrkästi järjestelmän monimutkaisuuteen ja parantamiseen.
Alkuperäisen idean mukaan DLL-tiedostojen tulee olla yhteensopivia versiosta toiseen ja vaihdettavissa molempiin suuntiin.
DLL-mekanismin toteutus on sellainen, että yhteensopimattomuudesta ja ei-vaihtokelpoisuudesta tulee pikemminkin sääntö kuin poikkeus, mikä johtaa moniin ongelmiin.
Ristiriitojen välttämiseksi on yleistä käyttää useita redundantteja DLL-kopioita jokaisessa sovelluksessa, mikä kumoaa alkuperäisen idean hyödyntää DLL-tiedostoja vakiomoduuleina, jotka tallennetaan kerran muistiin ja jaetaan monille tehtäville. Lisäksi tällaisella kokemuksella DLL-virheiden korjaamisen tai järjestelmän arkistosta palauttamisen jälkeen erilaisten samannimististen ja samoja toimintoja suorittavien DLL-tiedostojen määrä kasvaa, ja automaattinen version päivitys tai virheenkorjaus tulee mahdottomaksi.
Tämä ongelma ilmeni Microsoft Windowsin varhaisissa versioissa .
Mac OS X :n varhaisissa versioissa oli samanlaisia ongelmia , mutta niissä käytettiin eri tekniikoita.
Ongelma toistuu, kun ohjelmaa yritetään ajaa eri DLL:llä, josta se testattiin, mikä osoittaa alkuperäisen virheen yleisessä konseptissa, joka mahdollistaa moduuliversioiden mielivaltaisen korvaamisen.
Näitä toimenpiteitä suositellaan suoritettavaksi samanaikaisesti parhaiden tulosten saavuttamiseksi:
Vuonna 2001 Microsoft määritteli .NET Framework -alijärjestelmän pakettien kehittämiseen ( kokoonpanot : katso tästä ). Tämä alijärjestelmä alkoi tukea yhteistä ajonaikaista kirjastoa liittämällä DLL:n pääsuoritettavaan luokkaan.