Obter áreas associadas a um projeto MVC

Existe uma maneira de obter os nomes das áreas em um projeto MVC?

Aqui estão algumas maneiras em que posso pensar:

a) Se eu tivesse a fonte, poderia navegar pela estrutura de pastas do projeto e enumerar as pastas na pasta Áreas. Mas isso não garante que todas as pastas representem áreas, a menos que eu também tenha enumerado a pasta Controladores e Exibições em cada uma das subpastas. Essa abordagem, como você pode ver, é péssima.

b) No binário, eu poderia enumerar todos os namespaces que correspondem aos critériosRootNamespaceOfProject.Areas.*.

Ou, tenho certeza de que há uma maneira mais elegante. Deve haver algum dicionário na estrutura do ASP.NET MVC que mantenha um registro de todas as áreas.

Em segundo lugar, existe também uma construção programática na estrutura MVC que representa uma área? Não consigo encontrar um. Existem apenas quatro construções que sãorelacionado para áreas:

 1. AreaRegistration
 2. AreaRegistrationContext
 3. IRouteWithArea
 4. AreaHelpers (an internal class)

Se houvesse um, seria possível, por exemplo, enumerar todos os controladores nessa área?

Editado

Acabei de perceber que existe esse arquivo chamadoMVC-AreaRegistrationTypeCache.xml na pasta \ Windows \ Microsoft.NET \ Framework \ v4.x.x \ Arquivos temporários do ASP.NET \ root \ RandomlyGeneratedHash1 \ RandomlyGeneratedHash2 \ UserCache.

Esta pasta possui dois arquivos:

a)MVC-AreaRegistrationTypeCache.xml: Este arquivo possui a lista de todas as áreas em todas as montagens na máquina que possuem áreas.

b)MVC-ControllerTypeCache.xml: Este arquivo lista os controladores nas áreas das montagens.

Agora, a única coisa a descobrir é se existe alguma maneira programática de fazer com que a estrutura MVC leia esses arquivos e me diga se existe uma certa área em um binário.

Eu estou pensando que oAreaRegistration classe pode ser a única. Explorando ainda mais ...