GOOGLE ADS

domingo, 17 de abril de 2022

C# cambiar el nombre de los espacios de nombres durante la compilación

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 Internalizey RenameInternalized. Internalizecambiará los modificadores públicos a internos para los ensamblajes combinados, mientras que RenameInternalizedagregará 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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...