Aktualizace knihovny v projektu   zodpovězená otázka

Offtopic

Dobrý den, mám asi banální otázku, patřící k základu .NETu.

Pokud se v projektu odkazuji na libovolnou knihovnu *.dll, pak při změnách v té knihovně je nutné znovu sestavit daný projekt? Nebo se změny promítnou automaticky ve všech projektech, kde byla knihovna použita? Zkoušel jsem to, ale změny se projevily až při opětovném sestavení projektu. Tak nevím, jestli je to vlastnost .NETu, nebo záležitost nastavení. Děkuji, Hranec.

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

Za běžných okolností není nutné znovu sestavit projekt. Při sestavování se vytváří do knihovny odkazy, ale nekopíruje se její aktuální kód.

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

Děkuji za reakci pane Jecho.

Nevím, jak běžná situace to u mne je, ale bohužel se mi to nedaří.

Mám v úmyslu si napsat knihovnu ovládacích prvků, tak abych si je v novém projektu mohl vkládat do formuláře z toolboxu. To se mi daří, ale změny ve funkcích těch daných ovládacích prvků, se odrazí až po opětovném sestavení toho formuláře. Nic méně mi to nefunguje ani v mnohem jednodušší situaci.

Toto je jednoduchá třída v knihovně

Public Class Pokus
    Public str As String = "ANO"
End Class

Tady je volání její instance v jednoduchém formuláři

Imports Class_Pokus
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim pok As New Pokus
        MsgBox(pok.str)
    End Sub
End Class

A tady je znovu sestavená knihovna

Public Class Pokus
    Public str As String = "NE"
End Class

Když spustím *.exe formuláře bez opětovného sestavení, tak pok.str vrací "ANO".

Co jsou prosím Vás tedy ty běžné okolnosti? Asi dělám někde systémovou chybu (možná v nastavení??), děkuji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nejdříve modelový příklad:

- máte knihovnu (dll)

- máte aplikaci (exe) - odkazuje se na knihovnu

Knihovna obsahuje třídu jejíž funkce volá aplikace a vrací textový řetězec.

Knihovna i aplikace je sestavená a po spuštění aplikace se zobrazuje požadovaná hodnota.

Nyní otevřete projekt knihovny, změníte kód a knihovnu sestavíte. Následně knihovnu nakopírujete vedle již dříve zkompilované aplikace a aplikaci spustíte. Aplikace již vypíše novou hodnotu.

Může však nastat situace, kdy aplikace při prvním sestavení hodnotu z knihovny uloží přímo "do sebe". Například pokud použijete konstanty.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pane Jecho, postupoval jsem podle Vašeho modelového příkladu a změnil jsem ten string na funkci

Public Class Pokus
    Public Function str() As String
        Dim Vystup As String = ""
        For i As Integer = 0 To Val(InputBox("", "", 5))
            Vystup &= i & vbCrLf
        Next
        Return Vystup
    End Function
End Class

Sestavil jsem knihovnu i aplikaci

změnil jsem v knihovně třídu Pokus na

Public Class Pokus
    Public Function str() As String
        Dim Vystup As String = ""
        For i As Integer = 0 To Val(InputBox("1", "2", 5)) * 2
            Vystup &= i & vbCrLf
        Next
        Return Vystup
    End Function
End Class

(počet cyklů jsem zdvojnásobil)

a sestavil jsem knihovnu.

Nahradil jsem původní *.dll za nově sestavenou a spustil jsem dříve sestavený program.exe

Bohužel stále se stejným výsledkem. V momentě, kdy sestavím *.exe znovu, pak se dočkám výsledku.

Nezkoušel jsem restartovat počítač. Jestli se to třeba dočasně někam neukládá a k sestavení s aktualizovanou knihovnou nedochází až po čase???

Nebo jde o malé změny, které ta aplikace prostě nereflektuje? Nevím...

Moc děkuji za Váš čas

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zkuste funkci zjednodušit (například rovnou bude vracet řetězec) a poslat mi tyto varianty:

- původní exe a dll

- nové zkompilované exe a nové dll

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

Pane Jecho, z hloubi celého srdce se Vám omlouvám a smekám před Vaší trpělivostí. Jak jsem začal plnit Váš pokyn, tak jsem si teprve všiml, že ve složce s projektem, je i knihovna, kterou v projektu volám. Takže při sestavení projektu se kopie všech využitých knihoven, které zřejmě nejsou součástí fremeworku, kopírují do projektu a distribuují se rovnou s projektem. Já jsem pořád přepisoval knihovnu, kterou jsem měl nastavenou v referencích visual studia. Když jsem přepsal tu správnou knihovnu, tak vše fungovalo dle mých představ. Je mi velmi trapně a ještě jednou se Vám omlouvám. Toho drahoceného času... Dnes se budu vracet domů kanálama :o)

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

To se stává, hlavně že je po záhadě :)

nahlásit spamnahlásit spam 1 / 1 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