Avatar billede rmjdk Nybegynder
02. oktober 2009 - 13:09 Der er 6 kommentarer

Reference assembly check

Hey

Jeg har en applikation der refererer en MOSS 07 .dll, jeg vil gerne kunne lave et check når applikationen starter for om reference assemblien eksiterer istedet for at der bliver kastet en exception, hvordan styres dette?
Avatar billede coreclr Nybegynder
02. oktober 2009 - 13:17 #1
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (var item in assemblies)
        {
            if (item.FullName == "fullName")
            {
              //do something
            }
        }
Avatar billede bvli Praktikant
02. oktober 2009 - 13:19 #2
Type t = Type.Load("EnTypeSomFindesIMOSS07Assembly, Fuldt.Navn.Af.Assembly.uden.dll.i.enden", false);
if (t != null) {
  //Assembly er load'et - fortsæt
} else {
  throw new BlaBlaException("Moss07 not installed.");
}
Avatar billede coreclr Nybegynder
02. oktober 2009 - 13:20 #3
Du kan også bruge ManifestModule.Name:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (var item in assemblies)
        {
            if (item.ManifestModule.Name == "Microsoft.Office.Interop.Excel.dll")
            {
              //do stuff
            }
        }
Avatar billede bvli Praktikant
02. oktober 2009 - 13:22 #4
Hvis du bruger AppDomain.GetAssemblies() giver den dig kun assembliles som er loaded, ikke assemblies som /kan/ loades.
Avatar billede coreclr Nybegynder
02. oktober 2009 - 13:28 #5
"en applikation der refererer en MOSS 07 .dll".

Derfor burde AppDomain.GetAssemblies() være ok.
Avatar billede bvli Praktikant
02. oktober 2009 - 14:21 #6
Det har du ret i. Problemet er, at du ikke VED om runtimen har loaded assembly'en endnu. (Det *gør* den eksisterende runtime ved opstart lokalt, men vi ved ikke om fremtidige versioner vil - slet ikke hvis refererede assemblies skal hentes remote). Kaldet til GetAssemblies, vil prøve at loade assemblien - og du vil få en exception allerede dér.

Problemet er teoretisk i øvrigt - men hvis moss-assembliet er refereret via et andet assembly - vil runtimen først loade det når en type fra det skal bruges af det refererede assembly. (Og så vil mit forslag i øvrigt heller ikke virke, da jeg forudsætter en reference til typen.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB