使用VS 2008添加的SerializationException:找不到程序集

时间:2011-02-04 12:47:53

标签: c# serialization assemblies visual-studio-addins

我正在编写一个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,文化=中立,   公钥= 9744987c0853bf9e”。

     

类型:   System.Runtime.Serialization.SerializationException

     

Mensaje:无法找到装配   “COMPANY.LifeCycle.Mfa,   版本= 2.0.0.0,文化=中立,   公钥= 9744987c0853bf9e”。

     

StackTrace:

     

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

     

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

     

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

     

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

     

在   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,   布尔值fCheck,布尔值   isCrossAppDomain,IMethodCallMessage   methodCallMessage)

     

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

     

在   COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.Deserialize(流   serializationStream)in   E:\ TFS \亲\ COMPANYTeam \ MAIN \公用\ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs:行   139

     

在   COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.AbrirFicheroMfa()   在   E:\ TFS \亲\ COMPANYTeam \ MAIN \公用\ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs:行   131

     

在   COMPANY.VSIntegration.ComunDespliegue.Visualizadores.FrmVisorMfaICSharpCode.FrmICSharpCode_Load(对象   发件人,EventArgs e)in   E:\ TFS \亲\ COMPANYTeam \ MAIN \公用\ COMPANYDevelopment \ COMPANY.VSIntegration.ComunDespliegue \ Visualizadores \ VisorMfa \ FrmVisorMfa.cs:行   72

有什么建议吗?

更新: 一旦我收到此错误:

SerializationException:

  

[A] COMPANY.LifeCycle.Mfa.MfaContainer   无法施展   [B] COMPANY.LifeCycle.Mfa.MfaContainer。

     

A类源自   “COMPANY.LifeCycle.Mfa,   版本= 2.0.0.0,文化=中立,   上下文中的PublicKeyToken = null'   'LoadFrom'位置   'C:\项目\加载项\ MFA \ COMPANY.LifeCycle.Mfa.dll'。

     

B型起源于   “COMPANY.LifeCycle.Mfa,   版本= 2.0.0.0,文化=中立,   上下文中的PublicKeyToken = null'   'LoadNeither'在位置   'C:\ Documents and Settings \ eprados \Configuraciónlocal\ 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

程序集与我的插件一起位于addin目录中。我序列化的类型是可序列化的。 COMPANY.LifeCycle.Mfa.dll是相同的。

1 个答案:

答案 0 :(得分:1)

使用Fuslogvw.exe查找CLR查找程序集的位置。有两个基本原因。首先,您在最近的更新中增加了程序集的[AssemblyVersion],并尝试反序列化使用旧版本程序集保存的数据。

第二个是它根本找不到DLL。只有几个地方可以存储程序集,以便在VS运行时找到它。 Visual Studio的Common7 \ IDE目录的GAC或PrivateAssemblies或PublicAssemblies子目录。