2011-02-04 1 views
0

Я пишу надстройку Visual Studio 2008, и все работает нормально, но за несколько дней иногда появляются странные ошибки в процедуре сериализации (невозможно найти сборку).SerializationException с использованием VS 2008 Addin: не найти сборку

Мои добавочные файлы компилируются и работают.

При открытии нового экземпляра Visual Studio мой аддон не работает при выборе пункта меню.

но если открытое решение всех работ (мало, иногда не)

код:

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); 
     } 

ошибка:

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

какие-либо предложения?

обновление: раз я получаю эту ошибку:

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'.

У меня есть приложение WinForms, и все работы. Сериализация в порядке.

Для VS Addin, у меня есть:

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

ComunDespliegue.dll references LifeCycle.Mfa.dll

Для WinForms приложения, у меня есть:

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

Узла находиться в каталоге надстройки вместе с моей надстройкой. тип, который я сериализую, сериализуем. COMPANY.LifeCycle.Mfa.dll тот же.

ответ

1

Используйте Fuslogvw.exe, чтобы узнать, где CLR ищет сборку. Есть две основные причины. Во-первых, вы увеличили [AssemblyVersion] сборки в недавнем обновлении и пытаетесь десериализовать данные, которые были сохранены со старой версией сборки.

Во-вторых, он просто не может найти DLL. Есть только несколько мест, где вы можете сохранить сборку, чтобы ее можно было найти при запуске VS. Подкаталог GAC или PrivateAssemblies или PublicAssemblies каталога Common7 \ IDE Visual Studio.

+0

Сборка находится в каталоге addin рядом с моим добавлением. тип, который я сериализую, сериализуем. COMPANY.LifeCycle.Mfa.dll тот же. – Kiquenet

+0

Никогда не используйте Assembly.LoadFile(). –