.net - net - justdecompile full
.NET Assembly Diff/Compare Tool-¿Qué hay disponible? (8)
Creo que hay un complemento Reflector para eso en http://www.codeplex.com/reflectoraddins llamado diff. Puedes intentar eso.
Me gustaría poder hacer una diferencia de nivel de código entre dos ensamblajes; El complemento Diff para Reflector es lo más cercano que he encontrado hasta ahora, pero para comparar todo el ensamblaje es un proceso manual que requiere que profundice en cada espacio de nombres / clase / método.
Las otras herramientas que he encontrado hasta ahora parecen estar limitadas a las diferencias a nivel de API (espacios de nombres, clases, métodos), que no reducirán lo que estoy buscando.
¿Alguien sabe de tal herramienta? Mis requerimientos (de mayor a menor) son:
- Ser capaz de analizar / reflejar el contenido del código de dos versiones del mismo ensamblaje e informar las diferencias
- Acepte una carpeta o grupo de ensamblajes como entrada; Compáralos rápidamente (similar a la carpeta de WinMerge)
- Capacidad rápida para determinar si dos ensamblajes son equivalentes a nivel de código (no solo los API)
- Permite un fácil desglose para ver las diferencias
- Exportación de informes sobre las diferencias.
(Personalmente, me gusta WinMerge para diferencias de texto, por lo que una aplicación con una interfaz similar sería genial)
El addin dif para reflector es genial! Lo he estado utilizando durante años.
Esta es una especie de pregunta duplicada, a esta .
Como se mencionó en el otro, hay una herramienta gratuita y de código abierto llamada BitDiffer . Es increíble, puede comparar compilaciones completas o DLL individuales y muestra la jerarquía de espacio de nombres para encontrar fácilmente lo que cambió.
Hice una pequeña herramienta específicamente para comparar Ensamblajes de una manera determinada. Tuve dos ensamblajes que eran básicamente los mismos, excepto que el IL en los métodos era ligeramente diferente y uno tenía algunos NOP distribuidos en todas partes. El código C # era casi idéntico para ellos, pero el IL era claramente muy diferente. Intenté usar ILDasm y comparar la salida generada con TortoiseMerge / WinDiff, pero tenía tantas falsas diferencias que era inútil. Los NOP realmente se metieron con la salida, ya que cambió las direcciones de las sucursales, y básicamente produjo una diferencia en cada línea de cada método.
Entonces, construí una pequeña herramienta llamada ILDump . Tiene licencia BSD. Es capaz de recortar los NOP, usando un cambio de nombre de etiqueta "inteligente" para que el código sea el mismo, pero cambiado por un NOP, no sea detectado como una diferencia por los programas Diff, y también solo imprime etiquetas significativas ( Es decir, los que están ramificados / cambiados a). También puede ordenar los métodos para que dos ensamblajes que fueron "creados" de una manera diferente no sean capturados como una diferencia.
Definitivamente no es perfecto, no maneja nada, pero desecha la IL de cada método, y no hay esperanza de disparar. La razón por la que lo creé fue para facilitar la lectura de la IL de un método (su etiquetado inteligente hace que sea mucho más fácil rastrear sucursales), y así poder ejecutarlo a través de un programa como TortoiseMerge o WinDiff y no decir que hay una diferencia en cada línea de código.
La herramienta NDepend ofrece muchas características para manejar el código .NET.
El panel Buscar por cambio está dedicado a buscar códigos de ensamblajes diferentes:
Se proponen muchas reglas de código que limitan la diferencia y la evolución. Pueden ser un buen comienzo para escribir tus propios o adaptarlos a tus necesidades. Por ejemplo, mira la regla:
Tipos que solían estar cubiertos al 100% pero ya no
// <Name>Types that used to be 100% covered but not anymore</Name>
warnif count > 0
from t in JustMyCode.Types where
t.IsPresentInBothBuilds() &&
t.OlderVersion().PercentageCoverage == 100 &&
t.PercentageCoverage < 100
let culpritMethods = t.Methods.Where(m => m.PercentageCoverage < 100)
select new {t, t.PercentageCoverage, culpritMethods }
o también:
- Cambios de ruptura de API: Métodos
- Evita hacer métodos complejos aún más complejos.
- Evitar disminuir la cobertura de código por pruebas de tipos.
- A partir de ahora, todos los tipos agregados o refaccionados deben respetar los principios básicos de calidad.
- Evita transformar un tipo inmutable en uno mutable.
- Heurístico para encontrar tipos movidos de un espacio de nombres o ensamblaje a otro
Para comenzar a utilizar las funciones de comparación de NDepend, consulte la documentación:
Diferencia avanzada de código desde Visual Studio : explica cómo usar las funciones de comparación de compilación de NDepend, en el contexto de Visual Studio y la interfaz de usuario independiente de Visual NDepend .
Código de informe Diff : explica cómo usar las funciones de comparación de compilación de NDepend, en el contexto de los informes .
Descargo de responsabilidad: trabajo para NDepend
Prueba estos:
Puede usar ILDasm
para generar la fuente desde un ensamblaje. La fuente de IL es básicamente un archivo de texto, por lo que puede comparar dos archivos il mediante herramientas estándar de diferenciación de texto. Es posible que no sea necesario interpretar las fuentes de IL si utiliza las diferencias informadas como una indicación de dónde buscar más.
ILSpy puede descompilar un ensamblaje en una estructura de directorios ordenada. Haga esto para cada uno de sus ensamblajes y puede usar una herramienta de diferencias de su elección para ver qué ha cambiado.