Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 2.679 pregleda

Najnovija ↓

InvalidCast pri Debug-u 17.01.2008. u 13:36 · pre 228 meseci #1
Prilikom pokretanja programa u "Debug" konfiguraciji dobijam grešku {System.InvalidCastException}. Možda to i ne zvuči toliko čudno, ali ako konfiguraciju promenim u "Release" sve radi kako treba. Još jedna čudna stvar je ta da je pre mesec dana isti kod radio u obe konfiguracije.

Probao sam da uradim Clean Solution, brisao ceo folder gde se nalazi debug konfiguracija, gasio VS i ostao bez ideje kako (i u čemu) je problem

Problematični kod je

Code:

        For Each File As IO.FileInfo In New IO.DirectoryInfo(sFolder).GetFiles("*.dll", IO.SearchOption.AllDirectories)
            Dim Asm As Reflection.Assembly
            Dim cParser As IParser
            Try
                Asm = Reflection.Assembly.LoadFrom(File.FullName)
                For Each t As Type In Asm.GetTypes
                    If Not t.GetInterface("IParser") Is Nothing Then
                        cParser = DirectCast(Asm.CreateInstance(t.Namespace & "." & t.Name), IParser)   ' <---- greška je naravno ovde
                        ...
                        ...
                        ...
                    End If
                Next
            Catch ex As Exception
                debug.print ex.message
            End Try
        Next



Da li neko ima rešenje?
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: InvalidCast pri Debug-u 17.01.2008. u 14:24 · pre 228 meseci #2
Hmm, izgleda weird, jedino sto mi mozda pada na pamet je da u releasu ucitava i neki drugi DLL koji ima klasu sa IParser interfejsom iz drugog namespace-a pa prodje if a pukne cast. Probaj da u GetInterface testiranju iskoristi full name IParser interfejsa...
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: InvalidCast pri Debug-u 17.01.2008. u 14:54 · pre 228 meseci #3
Probao

Code:

If Not t.GetInterface("SuVu.Tabulator.Common.IParser") Is Nothing Then
    cParser = DirectCast(Asm.CreateInstance(t.Namespace & "." & t.Name), SuVu.Tabulator.Common.IParser)


i ne radi :(
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: InvalidCast pri Debug-u 17.01.2008. u 17:31 · pre 228 meseci #4
OK, ajmo onda na dijagnostiku, ubaci jos jedan try/catch unutar ForEach(t) i kad ti pukne vidi za koju klasu ti je pukao pa onda pogledaj koja je to klasa i dal ta klasa podrzava IParser i ako ne kako je uspela da prodje kroz if uslov

Sad se nesto setih jos, gde ti je deklarisan SuVu.Tabulator.Common.IParser? Da nije naleteo na njega i pokusava da instancira interfejs (sto ne moze)?

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: InvalidCast pri Debug-u 18.01.2008. u 01:09 · pre 228 meseci #5
Probao još jedan try catch - ista greška
Proverio iz kog fajla pokušava da napravi instancu - nije onaj gde je definisan interface. Nisam napomenuo da petlja treba da napravi instance iz četiri različita fajla i da na svim fajlovima pravi grešku

i onda ....

kopirao projekat sa externog HDD-a (sa kog sam ga direktno startovao) na lokalni disk i verovali ili ne sve radi kako treba :( Koje su šanse da to može da bude greška (predpostavljam velike) i kako može da se ispravi??????

Ako se dobro sećam ranije sam projekat startovao direktno sa USB-a i nisam imao ovih problema. Probaći sutra opet sa USB-a pa ću javiti rezultat.


Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: InvalidCast pri Debug-u 18.01.2008. u 01:59 · pre 228 meseci #6
Heh, pre skoro tacno tri godine sam imao vrlo slican problem koji nisam uspeo resiti. Evo link, ako ima nesto korisno tamo a i cisto zbog poveznosti slicnih tema - http://www.elitesecurity.org/t91336
(ne znam sta sam posle poslednjeg posta u toj temi radio, u svakom slucaju nisam uspeo)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: InvalidCast pri Debug-u 18.01.2008. u 12:27 · pre 228 meseci #7
Ne bi trebalo da ti ima veze, removable storage se vodi kao lokalni diskovi ne podpada pod default codesecuity zabrane.
Pogledaj kao prvo sledece, da li se uopste instancira objekat kroz CreateInstance, mozda cast puca zato sto kreiranje objekta nije proslo kako treba i vratilo null. CreateInstance vraca null ako tip sa tim imenom nije pronadjen (za svaki slucaj, umesto t.Namespace & "." & t.Name koristi t.FullName)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: InvalidCast pri Debug-u 21.01.2008. u 11:28 · pre 228 meseci #8
Eto mene opet

Objekat se kreira bez greške
Code:

Dim o As Object = Asm.CreateInstance(t.FullName)
cParser = DirectCast(o, SuVu.Tabulator.Common.IParser)


ali dalje opet isto
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: InvalidCast pri Debug-u 21.01.2008. u 12:36 · pre 228 meseci #9
Cek, moze li uopste da se cast-uje u interface? Ne kazem da ne moze, ali mi malo cudno izgleda, jer ne mozes imati instancu interfejsa.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: InvalidCast pri Debug-u 21.01.2008. u 12:48 · pre 228 meseci #10
Kad prebacim u release konfiguraciju ovaj kod radi tako da je odgovor: "Da, može"
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: InvalidCast pri Debug-u 21.01.2008. u 12:49 · pre 228 meseci #11
Mozes imati referencu na interfejs unutar postojece instance neke klase koja ga implementra, i ta reference se izvlaci kroz castovanje i u potpunosti je ukljucena u GC object graph (tj objekat nece biti pociscen kad sve reference odumru ako postoji interface referenca nad tim objektom):

IParser ip = (IParser)objekat;

jedino sto ne mozes je da kreiras novu instancu interfejsa:

IParser ip = new IParser();



Citat:
vujkev: Eto mene opet Objekat se kreira bez greške ali dalje opet isto


Ajd sad pogledaj koji je to objekat i da li on stvarno implementira IParser

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: InvalidCast pri Debug-u 21.01.2008. u 13:09 · pre 228 meseci #12
Čisto kao podsetnik, rekao sam da kad kopiram projekat sa externog na interni HDD sve radi kako treba.

Ali da ne budem lenj proverio sam i koji je to objekat, i njegov kod i kao prva linija posle deklaracije klase stoji
Code:

    Implements SuVu.Tabulator.Common.IParser


tako da i to pada u vodu :(
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme