2011-02-04 2 views
0

J'écris un complément Visual Studio 2008 et tout fonctionnait bien, mais quelques jours, parfois, il y a des erreurs étranges à propos de la sérialisation (impossible de trouver l'assembly). Mes addins compilent le travail et le runtime aussi.SerializationException utilisant VS 2008 Addin: ne trouve pas assemby

Lorsque vous ouvrez une nouvelle instance Visual Studio, mon addin échoue lorsque vous cliquez sur l'option de menu.

mais si la solution ouverte tous les travaux (quelques échoue parfois)

Code:

private void AbrirFicheroMfa() 
     { 
      using (Stream containerStream = File.OpenRead(this.FicheroMFA)) 
      { 
       mfaContainer = this.Deserialize(containerStream); 
       containerStream.Close(); 
      } 
     } 

     public MfaContainer Deserialize(Stream serializationStream) 
     { 
      var formatter = new BinaryFormatter(); 
      return (MfaContainer)formatter.Deserialize(serializationStream); 
     } 

erreur:

Error al abrir Mfa en VisorMfa: Unable to find assembly 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e'.

Tipo: System.Runtime.Serialization.SerializationException

Mensaje: Unable to find assembly 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e'.

StackTrace:

at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()

at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)

at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)

at System.Runtime.Serialization.Formatters.Binary.ObjectMap.Create(String name, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()

at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)

at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)

at COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.Deserialize(Stream serializationStream) in E:\TFS\pro\COMPANYTeam\Main\Public\COMPANYDevelopment\COMPANY.VSIntegration.ComunDespliegue\Visualizadores\VisorMfa\FrmVisorMfa.cs:line 139

at COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.AbrirFicheroMfa() in E:\TFS\pro\COMPANYTeam\Main\Public\COMPANYDevelopment\COMPANY.VSIntegration.ComunDespliegue\Visualizadores\VisorMfa\FrmVisorMfa.cs:line 131

at COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.FrmICSharpCode_Load(Object sender, EventArgs e) in E:\TFS\pro\COMPANYTeam\Main\Public\COMPANYDevelopment\COMPANY.VSIntegration.ComunDespliegue\Visualizadores\VisorMfa\FrmVisorMfa.cs:line 72

des suggestions?

mise à jour: une fois que je reçois cette erreur:

SerializationException:

[A]COMPANY.LifeCycle.Mfa.MfaContainer cannot be cast to [B]COMPANY.LifeCycle.Mfa.MfaContainer.

Type A originates from 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\Projects\Addins\Mfa\COMPANY.LifeCycle.Mfa.dll'.

Type B originates from 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location 'C:\Documents and Settings\eprados\Configuración local\Datos de programa\Microsoft\VisualStudio\9.0\ProjectAssemblies\wi3h64z601\COMPANY.LifeCycle.Mfa.dll'.

J'ai une application WinForms et tout est travail. La sérialisation est ok.

Pour VS Addin, je:

Addin.dll references ComunDespliegue.dll and LifeCycle.Mfa.dll

ComunDespliegue.dll references LifeCycle.Mfa.dll

Pour l'application WinForms, j'ai:

UI.Client.dll references ComunDespliegue.dll and LifeCycle.Mfa.dll

L'ensemble situé dans le répertoire de Addin aux côtés de mon Addin. le type que je suis sérialisable est sérialisable. Le COMPANY.LifeCycle.Mfa.dll est le même.

Répondre

1

Utilisez Fuslogvw.exe pour savoir où le CLR a recherché l'assembly. Il y a deux raisons fondamentales. La première est que vous avez incrémenté le [AssemblyVersion] de l'assembly dans une mise à jour récente et que vous essayez de désérialiser les données qui ont été enregistrées avec l'ancienne version de l'assembly.

La seconde est qu'il ne peut tout simplement pas trouver la DLL. Il n'y a que quelques endroits où vous pouvez stocker un assemblage de sorte qu'il puisse être trouvé lorsque VS est en cours d'exécution. Le sous-répertoire GAC ou PrivateAssemblies ou PublicAssemblies du répertoire Common7 \ IDE de Visual Studio.

+0

L'assembly réside dans le répertoire addin à côté de mon addin. le type que je suis sérialisable est sérialisable. Le COMPANY.LifeCycle.Mfa.dll est le même. – Kiquenet

+0

N'utilisez jamais Assembly.LoadFile(). –

Questions connexes