c# .net windows dll ngen

c# - Cómo obtener el archivo PDB para mscorlib.ni.lib(.Net Framework 3.5)



windows dll (2)

Después de hacer muchas búsquedas, todavía no pude obtener la solución para la pregunta.

Tengo un archivo mdmp. La pila de llamadas muestra que está usando mscorlib.ni.dll. Para obtener la información de la función, necesito obtener su archivo pdb.

La versión de mscorlib.ni.dll es 2.0.50727.3655. Creo que proviene de .Net Framework 3.5.

Como mscorlib.ni.dll es el dll optimizado nativo que genera ngen.exe, entonces necesito usar ngen.exe createpdb para generar pdf para este dll.

ngen.exe createpdb "C:/Windows/assembly/.../mscorlib.ni.dll" "C:/SymbolCache"

Aquí está el resultado:

  1. No puedo encontrar ngen.exe en la carpeta "C: / Windows / Microsoft.NET / Framework64 / v3.5"
  2. Pude encontrar ngen.exe en la carpeta "C: / Windows / Microsoft.NET / Framework64 / v2", pero no tiene la opción createpdb.
  3. Pude encontrar ngen.exe en la carpeta "C: / Windows / Microsoft.NET / Framework64 / v4.0.30319" y admite la opción createpdb, pero informa de un error.

Microsoft (R) CLR Native Image Generator - Versión 4.0.30319.18408 Copyright (c) Microsoft Corporation. Todos los derechos reservados. Se encontró un encabezado no válido en la imagen nativa ''C: / Windows / assembly / NativeImages_v2.0.507 7_64 / mscorlib / 5cd1c2848ff40eb0a8c149706ee394fa / mscorlib.ni.dll''. Error no especificado (Excepción de HRESULT: 0x80004005 (E_FAIL))

Así que no tengo idea de cómo obtener el pdb para este mscorlib.ni.dll de Net Framework 3.5.

¿Alguna idea?


Al igual que la respuesta de Monseñor, para mí la solución fue hacer coincidir la bit-ness (64 bits o 32 bits). Mi minivolcado era de 64 bits, así que tuve que ir a la carpeta Framework64 y ejecutar ngen desde allí y todo estaba bien. Originalmente recibí el mismo error ngen como se describe aquí (el encabezado no es válido en la imagen nativa ... E_FAIL) porque estaba en la carpeta Framework en lugar de la carpeta Framework64 (facepalm).

Sin embargo, aunque el comando ngen funcionó ... el archivo pdb que se generó finalmente aún no fue aceptado por VS 2013 como un archivo de símbolos coincidente, en mi escenario.


Tuve el mismo mensaje de error hasta que me di cuenta de que llamaba ngen.exe desde la carpeta Framework 64 . Aparentemente, mscorlib.ni.dll no era de 64 bits.

Así que utilicé la versión de 32 bits de ngen.exe desde la carpeta C:/Windows/Microsoft.NET/Framework/v4.0.30319 y produjo correctamente el PDB.

Sin embargo, la ruta a su mscorlib.ni.dll incluye .../NativeImages_v2.0.507 7_64/... , que indica que es de 64 bits, por lo que este podría ser un problema diferente.