Motivi per cui la cache del controller API Web ASP.NET ignora gli assembly dinamici

0

Ho letto su come ASP.NET Web API cerca le posizioni dei controller negli assiemi e modi per aggiungere dinamicamente un nuovo assembly da cercare. Finora questo è andato tutto bene, tranne che ho notato un pochi riferimenti casuali su come la cache del controller ignorerà il caricamento di qualsiasi controller che vive in un assembly dinamico (.IsDynamic == true) e alcuni workaround per forzarlo a lavorare con un assembly dinamico.

Tuttavia, non riesco a trovare alcuna documentazione sul perché . Questa è solo una decisione di implementazione da parte del team di ASP.NET, o c'è qualcosa di più fondamentale al riguardo che avere un assembly generato dinamicamente causerebbe problemi reali o rompere qualcosa?

Qualche approfondimento o link a documenti che potrebbero far luce su questo? Ho qualche ipotesi, ma sono curioso di sapere i veri motivi.

Voglio essere completamente chiaro che non ho problemi a realizzare questo lavoro, mi chiedo perché questa rotta di design sia stata presa e quali caveat accompagnano.

Link:

link - indica specificamente un modo per lavorare con assiemi dinamici e che altrimenti verrebbero ignorati

link - una domanda SO che elenca assicurandosi che l'assembly non sia dinamico nella risoluzione dei problemi.

    
posta cost 16.07.2018 - 18:52
fonte

1 risposta

5

Questo problema ha origine nello stesso .NET Framework, non nell'API Web di ASP.NET.

Se si guarda il codice per DefaultHttpControllerTypeResolver.cs riga 80, vedrai che contiene il seguente commento:

// can't call GetExportedTypes on a dynamic assembly

Ricerca del metodo Assembly.GetExportedTypes () , genera NotSupportedException con la descrizione "L'assembly è un assembly dinamico."

Ci sono diversi metodi in Reflection che non funzionano su assiemi dinamici, inclusi AppDomain.CurrentDomain.GetAssemblies() e Assembly.Load() . Sospetto che questo sia un problema di sicurezza; gli assembly dinamici non possono essere firmati con il codice o forniti con le solite protezioni di sicurezza e pertanto non dovrebbero essere eseguiti in completa attendibilità, se possibile.

Ulteriori letture
Problemi di sicurezza in Reflection Emit

    
risposta data 16.07.2018 - 19:28
fonte

Leggi altre domande sui tag