ReflectionTypeLoadException   otázka

C#, Reflexe

Dobrý večer,

po delší době jsem nucen napsat něco v C# a "vyhořel" jsem na následujícím problému.

Potřebuji si pomocí metody ReflectionOnlyLoadFrom načíst assembly a zjistit, zda třídy, které tam jsou, implementují rozhraní IPluginInterface. Kód vypadá takto:

string[] files = Directory.GetFiles(pluginPath, "*.dll");

for (int i = 0; i < files.Length; i++)
{
   Assembly asm = Assembly.ReflectionOnlyLoadFrom(files[i]);

   foreach (Type t in asm.GetTypes())
   {
      foreach (Type t2 in t.GetInterfaces())
      {
         // Overeni, zda implementuje rozhrani
      }
   }
}

Vyhodí to výjimku při volání asm.GetTypes() - ReflectionTypeLoadException.

Když z třídy, která je v načítané assembly, odstraním to, aby implementovala rozhraní, tak to nespadne. Předpokládám, že chyba bude v nějaké drobnosti, ale já ji prostě nemůžu najít.

Díky za rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak je pravda, že s .ReflectionOnlyLoadFrom(...) mi to taky nějak nechodí.

Zkoušel jsem tohle a chodí to, jen nevím jaký rozdíl je mezi ReflectionOnlyLoad a Load (najdu si to :) ).

static void Main(string[] args)
        {
            //knihovna
            string lib = "C:\\TwinCAT\\ADS Api\\.NET\\v2.0.50727\\TwinCAT.Ads.dll";

            Assembly asm = Assembly.LoadFile(lib);


            foreach (var t in asm.GetTypes())
            {

                //hledané typy ICollection
                if (typeof(ICollection).IsAssignableFrom(t) & !t.IsInterface)
                {
                    
                    //nalezený typ
                    Console.WriteLine(t.ToString());
                    
                }

            }


            Console.ReadKey();



        }
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pomocí LoadFile() jsem to taky zkoušel, to fungovalo. Můj problém je v tom, že tohle je projektík do školy, kde je přímo řečeno:

Ověření pomocí reflexe, zda načítaná assembly je korektní bez nutnosti zavedení této assembly (ReflectionOnly)

Já jsem vlastně tu metodu ani neznal, ale když to má být ReflectionOnly, říkal jsem si, že tohle bude to pravé.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback