Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C#]Serializzazione e errore:"Impossibile trovare l'assembly <nome del mio assembly>"

    Ciao ragazzi ^^

    provo a spiegarvi il mio problema: ho un'applicazione con due finestre, ognuna delle quali ha un bottone, rispettivamente salva e apri. quella con salva serializza un oggetto su file, quella con apri lo deserializza; il tutto avviene tramite l'uso dei form OpenFileDialog e SaveFileDialog. Durante la serializzazione non ho particolari problemi: il file viene serializzato correttamente. Durante la deserializzazione però, viene lanciata la SerializationException con il messaggio "Impossibile trovare l'assembly <nome del mio assembly>".

    codice della serializzazione:
    codice:
                    //Crea l'oggetto ResultsToSerialize
                    MioOggetto resultsToSerialize;
                    // istanzio l'oggetto
    
                    IFormatter binaryFormatter = new BinaryFormatter();
                    Stream fileStream = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
                    binaryFormatter.Serialize(fileStream, resultsToSerialize);
    
                    fileStream.Close();
    la deserializzazione viene effettuata in questa maniera:

    codice:
                    MioOggetto resultsToSerialize;               
                    IFormatter binaryFormatter = new BinaryFormatter();
                   
                    Stream fileStream = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.None);
                    MessageBox.Show("filestream creato");
                    try
                    {
                        resultsToSerialize = (MioOggetto)(binaryFormatter.Deserialize(fileStream));             
                    }
                    catch (SerializationException se)
                    {
                        MessageBox.Show("SE: " + se.Message);
                    }
                    finally
                    {
                        fileStream.Close();
                    }
    ho provato a cercare un po' in internet e si dice un po' tutto e il contrario di tutto; qualcuno diceva che era un problema del framework .NET 1.5 (ma io ho il 3.5), altri che era un problema del binaryFormatter che inserisce in ogni file serializzato una stringa univoca (??) che rende impossibile la deserializzazione in ogni altra istanza di classe che non sia quella che ha serializzato l'oggetto, altri ancora che l'errore dell'assembly non trovato era dovuto al fatto che si provava a serializzare/deserializzare in due applicazioni diverse (non mi sembra il mio caso, in quanto ad essere diverse sono solo le finestre).

    qualcuno ha idea di cosa possa essere?
    grazie a tutti
    and the black stones under my bare feet
    cold and smooth like her milk-white palm
    and the silence which falls upon this shore
    resounds now louder than oncoming storm
    for all is gone

  2. #2
    EDIT:

    vi aggiorno un po' con qualche novità: usando come consigliatomi il visualizzatore log associazioni assembly (fuslogvw.exe) sono riuscito a capire (fforse) qual è la causa dell'errore, cioè la tentata
    associazione di un'assembly che è già associato al programma. Ecco il
    log del file incriminato:

    *** Voce di registro binder di assembly (19/12/2008 @ 7.41.52) ***

    Operazione non riuscita.
    Risultato associazione: hr = 0x80070002. Impossibile trovare il file
    specificato.

    Gestore assembly caricato da: C:\WINDOWS\Microsoft.NET\Framework
    \v2.0.50727\mscorwks.dll
    In esecuzione con l'eseguibile C:\Programmi\Sparx Systems\EA\EA.exe
    --- Segue registro dettagliato degli errori.

    === Informazioni sullo stato di preassociazione ===
    REG: Utente = OMICRON\User
    REG: DisplayName = PLDecisionSupport, Version=1.0.3274.41871,
    Culture=neutral, PublicKeyToken=null
    (Fully-specified)
    REG: Appbase = file:///C:/Programmi/Sparx Systems/EA/
    REG: PrivatePath iniziale = NULL
    REG: base dinamica = NULL
    REG: base della cache = NULL
    REG: AppName = NULL
    Assembly chiamante: (Unknown).
    ===
    REG: l'associazione ha origine nel contesto di caricamento di default.
    REG: impossibile trovare un file di configurazione dell'applicazione.
    REG: utilizzo del file di configurazione computer da C:\WINDOWS
    \Microsoft.NET\Framework\v2.0.50727\config\machine .config.
    REG: criterio attualmente non applicato al riferimento (associazione
    di assembly privati, personalizzati, parziali o basati su percorsi).
    REG: la stessa associazione è stata rilevata precedentemente. Errore
    hr = 0x80070002.
    ERR: errore irreversibile durante la verifica pre-download (hr =
    0x80070002).

    Come mi è sembrato di capire (e come verificato da me a runtime), le
    ultime due righe sono la causa del throw della SerializationException.
    Non capisco però cosa voglia dire che "la stessa associazione è stata
    rilevata precedentemente", visto che io sto semplicemente tentando di
    deserializzare un file senza affatto curarmi degli assembly.
    and the black stones under my bare feet
    cold and smooth like her milk-white palm
    and the silence which falls upon this shore
    resounds now louder than oncoming storm
    for all is gone

  3. #3
    dopo numerose ricerche ho trovato la soluzione. strano a dirsi, ma si tratta addirittura di un bug nel .NET framework, ancora non fixato nella versione 3.5 (fonte: http://beta.microsoft.com/VisualStud...dbackID=119402)


    qui invece c'è il workaround (poche linee di codice) suggerito da un utente:

    http://www.eggheadcafe.com/software/...es-except.aspx
    and the black stones under my bare feet
    cold and smooth like her milk-white palm
    and the silence which falls upon this shore
    resounds now louder than oncoming storm
    for all is gone

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.