26. juli 2006 - 13:41Der er
9 kommentarer og 1 løsning
Dll filer i dll fil
Hej alle sammen.
Nu sidder jeg og roder med en omgang dll filer. Jeg har lavet en masse små moduler, som jeg skal bruge som bygge sten i mange af mine fremtide projekter.
Jeg har f.eks. lavet en klasse/dll(benævnt 1. Dll) som kan udlæse værdier fra en XML fil. 1. Dll laver jeg en reference til i et andet projekt, som også ender ud i en dll(benævnt 2. Dll) fil.
Nu er det sjove så, at når jeg kører mit program så har en reference til 2. Dll, så bliver 1. Dll automatisk oprettet og lagt i min applikations folder.
But how? But why? Jeg havde godt nok regnet ud at min dll fil ville indeholde de dll filer den skulle bruge under afvikling. Jeg forventede ikke at den ville pakke dem ud og ligge dem i applikations folderen.
Nogen som kan komme med en overordnet beskrivelse/grund og evt. nogle links til nogle sider som har dette som et emne?
Det er visual studio der automatisk hiver refererede DLL´er ind i dit projekt. Hvis du kører applikationen udenfor VS, så vil du opdage at det ikke sker...
Ydermere så indeholder din DLL fil ikke andre DLL filer. De vil altid ligge hver for sig, med referencer til hinanden. VS kender disse referencer og sørger for at kopiere refererede "class library" assemblies til mappen hvor den eksekverende applikation ligger.
Så vi er enige om at jeg skal have alle generationer af dll filer liggende i min applikations mappe, for at den kan virker korrekt. Kan vi blive enige om det?
Jeg har nemlig lige prøvet at rive 1. Dll fil væk fra min applikation, ganske rigtigt, så blev min dll fil ikke oprettet igen, men applikationen kørte heller ikke mere, da den fik en access exception, fordi den ikke kunne finde 1. dll fil.
1 - Alle DLL filer samt exe ligger i samme mappe. Hurtigt og let, men ikke så godt hvis flere applikationer skal bruge de samme DLL filer.
2 - DLL filerne tilføjes GAC (Global access cache), hvorved de ikke behøver at ligge i samme mappe. Dette er godt hvis DLL filerne bruges af flere applikationer.
Når din applikation starter leder den efter referencer, i mappen hvor exe ligger samt i GAC.
Jeg har lavet en dll fil som kan tjekke applikations mappen for xml filer. Alle filer bliver læst igennem for at finde indstillings værdier.
Den dll bruger jeg til den dll fil som kan kommunikere med serial port, som manipulere med det data som serial porten kommer med. Dll filen laver et event når den er klar.
Dll filen til serial porten har jeg brugt i et test program, for at se at mine events kommer som de skal. Når jeg ser i test mappen, ser jeg at både serial dll filen OG Xml konfigurations dll filen ligger der. Det undre mig, da jeg forventede at når jeg lavede en dll fil, som inkludere andre dll filer, ville det hele ende som en dll fil. Så jeg slap for at have mere end en dll fil liggende i applikations mappen.
Så når jeg hentyder til "generationer", betyder det generation af "led" som jeg har lavet.
Det hele ender ikke som én DLL fil. DLL filer bliver ikke pakket ind i hinanden. Når du fra én DLL laver en reference til en anden DLL skaber du bare et envejs kendskab imellem DLL´erne.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.