2011-02-04 5 views
0

Visual Studio 2008 추가 기능을 작성 중이지만 모두 정상적으로 작동하지만 며칠 또는 때때로 직렬화 (어셈블리를 찾을 수 없음)에 대한 이상한 오류가 있습니다.VS 2008을 사용하는 SerializationException 추가 기능 : 찾지 못함 assemby

내 addins 컴파일 작업 및 런타임 너무.

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

내가 윈폼 응용 프로그램이 모든 작업입니다. 직렬화는 괜찮습니다. VS 추가 기능에 대한

, 나는이 :

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

ComunDespliegue.dll references LifeCycle.Mfa.dll

윈폼 응용 프로그램을 위해, 나는이 :

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

어셈블리는 내 추가 기능 나란히 추가 기능 디렉토리에 있습니다. 직렬화하는 형식 serializable입니다. COMPANY.LifeCycle.Mfa.dll은 같습니다.

답변

1

Fuslogvw.exe를 사용하여 CLR에서 어셈블리를 찾은 위치를 확인합니다. 두 가지 기본적인 이유가 있습니다. 첫째, 최근 업데이트에서 어셈블리의 [AssemblyVersion]을 증가시키고 이전 버전의 어셈블리로 저장된 데이터를 deserialize하려고합니다.

두 번째는 단순히 DLL을 찾을 수 없다는 것입니다. VS가 실행 중일 때 찾을 수 있도록 어셈블리를 저장할 수있는 몇 가지 장소가 있습니다. Visual Studio의 Common7 \ IDE 디렉터리의 GAC 또는 PrivateAssemblies 또는 PublicAssemblies 하위 디렉터리.

+0

어셈블리는 내 추가 기능과 함께 addin 디렉토리에 있습니다. 직렬화하는 형식 serializable입니다. COMPANY.LifeCycle.Mfa.dll은 같습니다. – Kiquenet

+0

Assembly.LoadFile()을 절대로 사용하지 마십시오. –

관련 문제