2010-08-18 6 views
3

Je reçois quand je MissingMethodException jeté appelle GetExportedTypes, le code:MissingMethodException jeté par GetExportedTypes

Assembly.LoadFrom(assemblyPath).GetExportedTypes(); 

L'exception (noms brouillées):

System.MissingMethodException was unhandled 
    Message="Method not found: 'Void Namespace.IMyMethod.MyMethod(UInt32, Namespace.IMyOtherMethod ByRef, UInt32 ByRef)'." 
    Source="mscorlib" 
    StackTrace: 
     at System.Reflection.Assembly._GetExportedTypes() 
     at System.Reflection.Assembly.GetExportedTypes() 
     at ConsoleApplication1.Program.Main(String[] args) in C:\Documents and Settings\jpealing\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 16 
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

L'exception n'a pas exception interne ou D'autres détails méritent d'être mentionnés.

Qu'est-ce qui cause cela? Comment puis-je le réparer?

réflecteur n'a pas de problèmes de chargement de cette assemblée:

  • Il est enregistré dans le GAC
  • Il ne mscorlib références.
  • Je n'ai pas construit l'assemblage - il n'y a qu'une seule version de cet assemblage sur ma machine.

Mise à jour:

L'assemblée en question semble être un ensemble construit en utilisant Tlbexp.exe - il semble probable que ce fait une sorte de différence.

+0

Si possible, pouvez-vous fournir l'ensemble de la trace de la pile? – leppie

Répondre

2

Pour autant que je le vois, il est simplement prévu que certains assemblages jettent cette exception - la méthode GetTypes lance une exception similaire - ReflectionTypeLoadException, mais cette exception a également une propriété Types qui semble être la liste des types qui ont été avec succès chargé.

Pour l'instant j'ai adapté mon code pour qu'il appelle cette méthode à la place et intercepte l'exception résultant:

try 
(
    return assembly.GetTypes(); 
) 
catch (ReflectionTypeLoadException ex) 
{ 
    return ex.Types; 
} 

Ce ne est pas assez, mais il ne semble fonctionner.

0

J'ai vu quelque chose de semblable quand je convertissait un projet de mine .NET 4.

Alors que ma question ait été PEVerify, il fait allusion au même problème. Si vous utilisez .NET 4 sur un assembly plus ancien, remplacez la politique de sécurité par la plus ancienne. Il s'agit du MSDN link.

+0

'Fraid c'est tout .Net 3.5 – Justin

+0

@Kragen: Cela sonne une cloche à propos d'un bug dans le 3.5 RTM d'origine qui a affecté les faux-semblants Rhino. – leppie

Questions connexes