Исключение SerializationException с использованием надстройки VS 2008: сборка не найдена - PullRequest
0 голосов
/ 04 февраля 2011

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

Мои дополнения компилируют работу, и время выполнения тоже.

Когда открывается новый экземпляр 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);
        }

ошибка:

Ошибка al abrir Mfa en VisorMfa: невозможно найти сборку «COMPANY.LifeCycle.Mfa, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = 9744987c0853bf9e.

Тип: System.Runtime.Serialization.SerializationException

Mensaje: Невозможно найти сборку «COMPANY.LifeCycle.Mfa, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = 9744987c0853bf9e.

StackTrace:

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

в System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType (BinaryAssemblyInfo assemblyInfo, строковое имя)

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

в System.Runtime.Serialization.Formatters.Binary.ObjectMap.Create (String имя, строка [] memberNames, BinaryTypeEnum [] binaryTypeEnumA, Object [] typeInformationA, Int32 [] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArrayassemIdToAssemblyTable)

в System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped (BinaryObjectWithMapTyped запись)

в System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped (BinaryHeaderEnum binaryHeaderEnum)

в System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.Run ()

в System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler обработчик, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)

в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream, HeaderHandler обработчик, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream)

в COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.Deserialize (Stream serializationStream) в E: \ TFS \ про \ COMPANYTeam \ Main \ Public \ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs: линия 139

в COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.AbrirFicheroMfa () в E: \ TFS \ про \ COMPANYTeam \ Main \ Public \ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs: линия 131

в COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.FrmICSharpCode_Load (Объект отправитель, EventArgs e) в E: \ TFS \ про \ COMPANYTeam \ Main \ Public \ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs: линия 72

есть предложения?

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

SerializationException:

* * Тысяча пятьдесят-шести [А] COMPANY.LifeCycle.Mfa.MfaContainer не может быть приведен к [B] COMPANY.LifeCycle.Mfa.MfaContainer. * * 1 057

Тип А происходит от «COMPANY.LifeCycle.Mfa, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = null 'в контекстеLoadFrom в месте 'C: \ Проекты \ Addins \ MFA \ COMPANY.LifeCycle.Mfa.dll'

.

Тип B происходит от «COMPANY.LifeCycle.Mfa, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = null 'в контексте 'LoadNeither' в местоположении '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 ComunDespliegue.dll и LifeCycle.Mfa.dll

Ссылки ComunDespliegue.dll LifeCycle.Mfa.dll

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

UI.Client.dll ссылки ComunDespliegue.dll и LifeCycle.Mfa.dll

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

1 Ответ

1 голос
/ 04 февраля 2011

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

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

...