recursos pueden puede not metadatos los found especificados error encontró encontro encontrar cs0006 could cargar archivo .net windows-runtime winmd

.net - not - no se pueden cargar los recursos de metadatos especificados



Dado un archivo.winmd, ¿dónde podemos encontrar la DLL de implementación real? (3)

Tengo dudas de que dado un archivo .winmd, ¿dónde podemos encontrar la implementación real? .winmd archivos al igual que un archivo de cabecera o archivo .lib de una biblioteca dinámica, no contiene ninguna implementación, tengo curiosidad por saber dónde está su implementación. Gracias.


Descargo de responsabilidad : esta respuesta describe detalles de implementación no documentados que pueden cambiar en cualquier momento sin previo aviso.

Para los tipos definidos en Windows.winmd o cualquier .winmd en C:/windows/system32/WinMetadata , el registro lo dirigirá a la implementación real.

Busque el nombre del tipo en HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsRuntime/ActivatableClassId/SystemSettings.DataModel.SettingsDatabase y el valor DllPath contendrá la DLL que implementa el tipo.


Hans es bastante acertado. Un archivo winmd simplemente describe la forma de un tipo (utilizado para la proyección de lenguaje CLR y JS en tiempo de ejecución y el compilador C ++ en tiempo de compilación). En tiempo de ejecución, la API RoActivateInstance (o la API RoGetActivationFactory) toma el nombre del tipo y devuelve un objeto que implementa ese tipo.

Para un tipo específico de aplicación, la entrada ActivatableClassId del manifiesto del paquete describe la ubicación de la implementación de la clase de tiempo de ejecución. Para un tipo específico de sistema, está ubicado en el registro, pero la ubicación del tipo puede cambiar en cualquier momento en el futuro.


No puedes. Un archivo .winmd solo contiene declaraciones de tipo, no contiene ningún código. Es el equivalente exacto a una biblioteca de tipos (.tlb) como se usa en Automatización COM. El equivalente lógico a un archivo .h en un programa C o C ++.

El formato .tlb era demasiado restrictivo para admitir WinRT y se rediseñó en .winmd, el formato del archivo es idéntico a los metadatos .NET y puede usar herramientas .NET (como ildasm.exe) para ver su contenido. Un compilador lo usa para saber cómo generar el código adecuado para usar un componente WinRT, al igual que un compilador de C ++ sabe cómo usar una biblioteca de clase # incluyendo un archivo .h que contiene las declaraciones de clase.

Y al igual que un archivo .h, depende de usted averiguar qué archivo ejecutable implementa los tipos y desplegarlo en la máquina del usuario. A menos que sea Windows.winmd, el que declara todos los tipos integrados de WinRT, es de esperar que el componente binario esté muy cerca del archivo .winmd. Store requiere que incluyas ese componente binario en tu paquete. Pídale ayuda al autor del componente si necesita ayuda.