2017-10-02 3 views
1

Nous avons une application écrite en .NET qui parcourt les assemblys .NET à l'aide de l'API Reflection. Lorsque nous utilisons cette application pour parcourir dll compilé avec .NET Core 2.0, il échoue avec l'exception suivante. Toute aide à ce sujet sera appréciée.Comment charger un assembly .NET Core à partir d'une application écrite en .NET Framework?

Unhandled Exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 
    at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) 
    at System.Reflection.RuntimeModule.GetTypes() 
    at System.Reflection.Assembly.GetTypes() 
    at ConsoleApp1.Program.NewMethod() in c:\Users\faisal_iqbal\documents\visual studio 2017\Projects\CoreX\ConsoleApp1\Program.cs:line 23 
    at ConsoleApp1.Program.Main(String[] args) in c:\Users\faisal_iqbal\documents\visual studio 2017\Projects\CoreX\ConsoleApp1\Program.cs:line 16 
+0

Utilisez-vous 'Assembly.ReflectionOnlyLoad()'? –

+0

@MartinUllrich J'ai essayé d'utiliser cela non plus. Mais le point est qu'il ne parvient pas à charger System.Runtime.dll – Faisal

+0

.NETCore est un cadre très différent. Si vous créez cet assembly en ciblant .NETStandard 2.0 à la place et ciblez votre application à au moins 4.6.1, vous pouvez le faire. –

Répondre

0

Répondre à ma propre question.

NETCore est un cadre très différent. Si vous créez cet assembly par ciblant .NETStandard 2.0 à la place et ciblez votre application au moins 4.6.1, vous pouvez le faire.

- Hans

Passant

Étant donné que .NET Framework et .NET de base sont différents cadres, chacun a sa propre Reflection API.

Si vous devez charger des assemblages uniquement pour la lecture de métadonnées, utilisez la structure Mono.Cecil qui fonctionne à la fois pour .NET Framework et pour .NET Core. Il ne charge pas l'assemblage ou les assemblages dépendants comme le fait Reflection. Il lit simplement les informations de méta-données comme

  • Types dans l'assemblage
  • Propriétés, champs et méthodes dans un type
  • Nom, FullName et Namespace d'un type
  • etc ...