944 messaggi dal 11 febbraio 2013
The assembly 'nome, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' was not found

Ottengo questo errore quando da un sito asp.net provo a deserializzare file .bin creati
da un progetto windows form

cosa vuol dire ?

Ps: lo stesso codice che serializzava prima stava in un sito asp.net

l'errore avviene qui
String path = Path.Combine(HttpRuntime.AppDomainAppPath, "unZIP/FileName.bin");
        long position = 0;      
        BinaryFormatter formatter = new BinaryFormatter();
        long blocchi = 0;
        using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
        {

Modificato da jjchuck il 14 maggio 2018 19.41 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
dev'essere che nella cartella /bin non è presente l'assembly cercato. Se è presente, sicuramente la sua versione è successiva da quella cercata. In questo caso, devi aggiungere un binding redirect nel file web.config, in modo che il runtime di .NET sappia che ogni volta che viene cercato l'assembly "nome, Version = 1.0.0.0", in realtà deve essere caricato l'assembly "nome, Version = 1.2.0.0". Correggi accuratamente la versione in modo che sia identica a quella che hai nella cartella bin.

Ecco vari esempi di binding redirect. Probabilmente ne avrai già qualcuno anche tu nel file web.config.
https://gist.github.com/sgwatgit/352fab5ed12bb8836a414f77629603f8

ciao,
Moreno
Modificato da BrightSoul il 14 maggio 2018 19.42 -

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
Quel binding redirect debbo farlo nel web config del sito
ma queste info
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />

dove le trovo ?

nella cartella bin del windows form ho due cartelle : debug e release che è vuota

nella cartella debug cè un file nomeProgetto.application

è qui che debbo prendere il token?


nei file .bin all'inizio trovo

...GSerializer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null...

ma credo che questo ci fosse anche quando il file era generato da un sito asp.net

Il messaggio di errore del sito asp.net dice che non trova qull'assembly ma non è un applicazione web e non ha cartelle Bin

non capisco cosa vuole
Modificato da jjchuck il 15 maggio 2018 11.29 -
11.886 messaggi dal 09 febbraio 2002
Contributi

Il messaggio di errore del sito asp.net dice che non trova qull'assembly ma non è un applicazione web e non ha cartelle Bin

Ok, quindi il tuo caso è quello di un assembly completamente mancante. Quindi in questo caso il binding redirect non serve. Devi invece installare il pacchetto NuGet.
https://www.nuget.org/packages/GSerializer/

Anche se non è un'applicazione web sarà un website... i pacchetti si possono installare lo stesso.

ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
L'ho installato ma ora cosa debbo fare col pacchetto ?

Ho capito (dimmi se sbaglio) che se la serializz-deserializz avveniva tra due siti (non application web)
il BinaryFormatter funziona...mentre se ora la serializzazione la fa un app windows vuole l'assembly

ma come debbo usare il pacchetto che ho installato
Modificato da jjchuck il 15 maggio 2018 15.13 -
944 messaggi dal 11 febbraio 2013
Forse mi hai frainteso o mi sono spiegato male

all'interno dei file binari leggo

GNomeMiaAppWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null tSystem.Collections.Generic.List`1[[MiaClasse


GSerializer era il nome che mi dava prima...ora ho reinstallato e mi da come sopra
944 messaggi dal 11 febbraio 2013
l'errore è qui
var listAgenti = (List<AGENTI>)formatter.Deserialize(stream);


non capisco come passare un asseblay al binaryformatter ... e nemmeno perchè
visto che quando usavo un sito per serializzare il binaryformatter non voleva nulla...

sto impazzendo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, finalmente penso di aver capito.

GNomeMiaAppWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null tSystem.Collections.Generic.List`1[[MiaClasse


Quindi il famoso GSerializer non è il pacchetto NuGet ma è il nome della tua applicazione WinForms. L'ho capito ora che hai postato il contenuto qui sopra. Nel file binario dunque è stata serializzata una List<MiaClasse>, dove MiaClasse è un tipo definito nella tua applicazione WinForms.

Dall'altra parte, stai cercando di deserializzare la List<MiaClasse> ma, se hai ridefinito MiaClasse anche nell'altra applicazione, il tipo non sarà lo stesso.

Bisogna che MiaClasse sia definita in una class library referenziata da entrambe le applicazioni.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.