Estoy buscando una manera de cambiar el nombre de los espacios de nombres en un ensamblaje de terceros durante el proceso de compilación (y las declaraciones de uso correspondientes en el código de usuario). Busqué entre los tejedores de fody pero no encontré tal cosa. Hay una solicitud de extracción para ILRepack que hace exactamente lo mismo, pero parece estar obsoleta y no pasa CI: https://github.com/gluck/il-repack/pull/268
Digamos que tengo dos proyectos, A y B, ambos están nugetizados y B tiene una dependencia de paquete en A. Dado que no quiero bloquear al consumidor en una versión específica en A cuando hago referencia a BI, estoy fusionando A en B con ILRepack e internalizando A allí, pero a pesar de que A está internalizado en B, existe una ambigüedad de tipo en las clases de A cuando el consumidor usa A y B en su proyecto C.
El paquete NEST (cliente de búsqueda elástica https://github.com/elastic/elasticsearch-net ) ha hecho exactamente lo mismo con el paquete Newtonsoft.Json.
Solución del problema
Lo he descubierto. Hay dos soluciones:
ILReempaquetar
ILRepack tiene opciones Internalize
y RenameInternalized
. Internalize
cambiará los modificadores públicos a internos para los ensamblajes combinados, mientras que RenameInternalized
agregará algunos GUID aleatorios a estos nombres de tipo. Todos los usos también se renombran correctamente.
Reescritor de ensamblaje
https://github.com/nullean/assembly-rewriter
Herramienta Dotnet que reescribe ensamblajes y cambia el nombre de los espacios de nombres. Está limitado al espacio de nombres raíz que es el mismo que el nombre del archivo de ensamblaje.
No hay comentarios:
Publicar un comentario