Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ReflectionTypeLoadException

[es] :: .NET :: ReflectionTypeLoadException

[ Pregleda: 895 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.240.*



+104 Profil

icon ReflectionTypeLoadException17.09.2009. u 19:29 - pre 179 meseci
Za početak malo objašnjenje

Client - server aplikacija. Komunikacija je urađena preko WCF-a

Client aplikacija je jedan exe fajl cija je jedina uloga da preuzme fajlove (pluginove) sa servera i da ih pokrene. Pri startovanju programa client proveri koje fajlove treba da ima i ako mu neki nedostaje zatraži od servera da mu pošalje fajl ..... i sve to lepo radi ... fajlovi se prebace i svi srećni i zadovoljni do sad.

Da kažemo da client dobije 3 fajla i to:
1. interfaces.dll
2. common.dll
3. orders.dll - ovaj fajl ima reference ka oba gore pomenuta fajla

Kad se fajlovi snime na client-u kreće njihovo učitavanje sa sledećim kodom
Code:
 Dim dir As New IO.DirectoryInfo(My.Application.Info.DirectoryPath)
        For Each fi As FileInfo In dir.GetFiles("*.dll", SearchOption.TopDirectoryOnly)
            Try
                Dim ass As Assembly
                ass = Assembly.LoadFile(fi.FullName)
                If Not ass Is Nothing Then
                    For Each ty As Type In ass.GetTypes
                        If Not ty.GetInterface(GetType(IClientPlugIn).FullName) Is Nothing Then
                            _MainPlugins.Add(DirectCast(ass.CreateInstance(ty.FullName), IClientPlugIn))
                        End If
                    Next
                End If
            Catch ex As Reflection.ReflectionTypeLoadException
                'todo: log greške
                Throw ex
            End Try
        Next

Valjda je jasno šta kod radi, ali ukratko client proverava sve dll-ove koji se nalaze u njegovom folderu (tu se nalaze i pomenuta tri fajla), u svim dll-ovima nalazi klase koje podržavaju IClientPlugIn i sve nađene klase dodaje u listu.


A sad problem
Code:
       For Each fi As FileInfo In dir.GetFiles("*.dll", SearchOption.TopDirectoryOnly)
 

nalazi dll-ove u sledećem redosledu:
1. common.dll
2. interfaces.dll
3. orders.dll

Prilikom učitavanja prvog i drugog fajla u prolaska kroz celu petlju nema nikakvog problema, ali kad dođe do orders.dll program puca u liniji
Code:

For Each ty As Type In ass.GetTypes


sa greškom
Citat:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.


tj. u loaderexception-u piše

Citat:
{"Could not load file or assembly 'Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7b4bfc8a83602933' or one of its dependencies. The system cannot find the file specified.":"Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7b4bfc8a83602933"}



Možda i ovo ne bi bilo toliko čudan problem da nije sledećeg.
Ukoliko ugasim client-a i ponovo ga startujem onda sve radi kako treba. Jedina razlika između ova dva puta je to što su drugi put fajlovi već tu tj. ni jedan fajl se ne traži od server-a.

Rešenje problema je?

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

markopadjen
Marko Pađen
Paraćin

Član broj: 182243
Poruke: 22
93.86.128.*



+1 Profil

icon Re: ReflectionTypeLoadException18.09.2009. u 12:45 - pre 178 meseci
A kako primaš te fajlove?

Meni je palo na pamet da možda nisi zatvorio upisivanje u fajl pošto ga prima poslednjeg i dok je program još uvek aktivan drži ga otvorenog.
To bi objasnilo zašto radi kada ga pokreneš ponovo, a oni su već tu, zato što ništa tada ne drži otvoreno.
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.telekom.yu.



+104 Profil

icon Re: ReflectionTypeLoadException18.09.2009. u 13:50 - pre 178 meseci
Preko WCF-a prebacujem po 64KB (ako se ne varam) dok ne preuzemem ceo fajl.

Assembly.load radi uvek, ali kod GetTypes program puca.

Za svaki slučaj probao sam sad da obrišem taj fajl pre nego što odradi assembly.load i to radi što će reći da fajl nije zaključan.

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

markopadjen
Marko Pađen
Paraćin

Član broj: 182243
Poruke: 22
93.87.229.*



+1 Profil

icon Re: ReflectionTypeLoadException20.09.2009. u 09:44 - pre 178 meseci
Ne znam prijatelje stvarno. :-))

Probaj da dodaš još jedan DLL za prenos da vidiš da li puca POSLEDNJI ili baš taj. Ako je baš taj onda provere Namespaceove i takve stvari...
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.243.*



+104 Profil

icon Re: ReflectionTypeLoadException20.09.2009. u 23:27 - pre 178 meseci
Našao sam rešenje problema

Možda nisam naveo da sam proveru koji mi je assembly potreban radio tako što sa servera dobijem spisak naziva assembly-a koji su mi potrebni (ne samo naziv fajla nego i vezije) i onda na klijentu pokušavao da učitam svaki od njih. Ukoliko bi učitavanje puklo označavao sam da je taj assembly potreban.

Rešenje problema je da sam celu tu proveru prebacio u poseban appdomain koji se posle provere uništava i samim tim brišu učitani fajlovi iz memorije.

Hvala svima
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

[es] :: .NET :: ReflectionTypeLoadException

[ Pregleda: 895 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.