我正在编写一个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是相同的。
答案 0 :(得分:1)
使用Fuslogvw.exe查找CLR查找程序集的位置。有两个基本原因。首先,您在最近的更新中增加了程序集的[AssemblyVersion],并尝试反序列化使用旧版本程序集保存的数据。
第二个是它根本找不到DLL。只有几个地方可以存储程序集,以便在VS运行时找到它。 Visual Studio的Common7 \ IDE目录的GAC或PrivateAssemblies或PublicAssemblies子目录。