简体   繁体   English

使用VS 2008外接程序的SerializationException:找不到assemby

[英]SerializationException using VS 2008 Addin: not find assemby

I'm writing a Visual Studio 2008 add-in and all was working fine, but few days, sometimes, there are strange errors about Serialization (unable to find assembly). 我正在编写一个Visual Studio 2008加载项,并且一切工作正常,但是几天后,有时会出现有关序列化的奇怪错误(无法找到程序集)。

My addins compile work, and runtime too. 我的插件可以编译工作,也可以编译运行时。

When open new instance Visual Studio, my addin fails when click menu option. 当打开新实例Visual Studio时,单击菜单选项时我的插件失败。

but then if open solution all works (few sometimes fails) 但是,如果开放式解决方案能够正常工作(有时会失败)

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

error: 错误:

Error al abrir Mfa en VisorMfa: Unable to find assembly 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e'. 错误的Mfa和VisorMfa错误:无法找到程序集'COMPANY.LifeCycle.Mfa,版本= 2.0.0.0,文化=中性,PublicKeyToken = 9744987c0853bf9e'。

Tipo: System.Runtime.Serialization.SerializationException 提示:System.Runtime.Serialization.SerializationException

Mensaje: Unable to find assembly 'COMPANY.LifeCycle.Mfa, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e'. Mensaje:无法找到程序集'COMPANY.LifeCycle.Mfa,版本= 2.0.0.0,区域性=中性,PublicKeyToken = 9744987c0853bf9e'。

StackTrace: 堆栈跟踪:

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

at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name) 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo,字符串名称)

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) 在System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor处(String objectName,String [] memberNames,BinaryTypeEnum [] binaryTypeEnumA,Object [] typeInformationA,Int32 [] memberAssemIds,ObjectReader objectReader,Int32 objectId,BinaryAssemblyInfo AssemblyInfo,SizedArrayTable )

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) 在System.Runtime.Serialization.Formatters.Binary.ObjectMap.Create(String name,String [] memberNames,BinaryTypeEnum [] binaryTypeEnumA,Object [] typeInformationA,Int32 [] memberAssemIds,ObjectReader objectReader,Int32 objectId,BinaryAssemblyInfo AssemblyInfo,SizedArray assemTable)

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record) 在System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped记录)处

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum) 在System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)中

at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run() 在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) 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize处(HeaderHandler处理程序,__ BinaryParser serParser,布尔值fCheck,布尔值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) 在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream,HeaderHandler handler,Boolean fCheck,Boolean isCrossAppDomain,IMethodCallMessage methodCallMessage)在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(流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 在E.

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

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 在E. 72

any suggestions ? 有什么建议么 ?

update: once I get this error: 更新:一旦我收到此错误:

SerializationException: SerializationException:

[A]COMPANY.LifeCycle.Mfa.MfaContainer cannot be cast to [B]COMPANY.LifeCycle.Mfa.MfaContainer. 无法将[A] COMPANY.LifeCycle.Mfa.MfaContainer强制转换为[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'. 类型A源自位置'C:\\ Projects \\ Addins \\ Mfa \\ COMPANY.LifeCycle.Mfa.dll'的上下文'LoadFrom'中的'COMPANY.LifeCycle.Mfa,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = null' '。

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'. 类型B源自位置“ C:\\ Documents and Settings \\ eprados \\Configuraciónlocal \\ Datos de programa \\”下的“ LoadNoth”上下文中的“ COMPANY.LifeCycle.Mfa,版本= 2.0.0.0,文化=中性,PublicKeyToken =空” Microsoft \\ VisualStudio \\ 9.0 \\ ProjectAssemblies \\ wi3h64z601 \\ COMPANY.LifeCycle.Mfa.dll”。

I have an WinForms application and all is work. 我有一个WinForms应用程序,一切正常。 Serialization is ok. 可以序列化。

For VS Addin, I have: 对于VS Addin,我有:

Addin.dll references ComunDespliegue.dll and LifeCycle.Mfa.dll Addin.dll引用ComunDespliegue.dll和LifeCycle.Mfa.dll

ComunDespliegue.dll references LifeCycle.Mfa.dll ComunDespliegue.dll引用LifeCycle.Mfa.dll

For WinForms app, I have: 对于WinForms应用,我有:

UI.Client.dll references ComunDespliegue.dll and LifeCycle.Mfa.dll UI.Client.dll引用ComunDespliegue.dll和LifeCycle.Mfa.dll

The assembly reside in the addin directory alongside my addin. 该程序集位于我的插件旁边的插件目录中。 the type i'm serializing is serializable. 我正在序列化的类型是可序列化的。 The COMPANY.LifeCycle.Mfa.dll is the same. COMPANY.LifeCycle.Mfa.dll是相同的。

Use Fuslogvw.exe to find out where the CLR looked for the assembly. 使用Fuslogvw.exe找出CLR在哪里寻找程序集。 There are two basic reasons. 有两个基本原因。 First is that you incremented the [AssemblyVersion] of the assembly in a recent update and are trying to deserialize data that was saved with the old version of the assembly. 首先,您在最近的更新中增加了程序集的[AssemblyVersion],并试图反序列化使用该程序集的旧版本保存的数据。

The second is that it simply cannot find the DLL. 第二个是它根本找不到DLL。 There are but a few places where you can store an assembly so that it can be found when VS is running. 在少数地方可以存储程序集,以便在VS运行时可以找到它。 Either the GAC or the PrivateAssemblies or PublicAssemblies subdirectory of Visual Studio's Common7\\IDE directory. GAC或Visual Studio的Common7 \\ IDE目录的PrivateAssemblies或PublicAssemblies子目录。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM