Yo no soy muy experimentado en esta zona, así que tengo un par de preguntas. En primer lugar, hacer todo .Neto creado Dll tiene su propio GUID? Si no, mi pregunta es ¿cómo puedo conseguir uno y asociarlo con el archivo DLL.

Entonces la pregunta es, ¿cómo puedo obtener el GUID de que dll – ie. dada una ruta DLL (c:\some\path\to\a\file.dll) ¿cómo puedo determinar su GUID? También, hay una manera fácil de ir a otro lado (GUID -> archivo DLL) – he leído un poco acerca de esto, pero mucho de esto se refiere a VB6 Dll de COM y esas cosas…¿todavía se aplican .Net Dll?

Actualización: Gracias por las respuestas. Tal vez me estoy haciendo la pregunta equivocada. Quiero tener un IDENTIFICADOR único para cada uno de mis archivos DLL, así que me puede hacer referencia a ellos en una base de datos. Quiero ser capaz de tomar el IDENTIFICADOR único almacenado en la base de datos y, a continuación, encontrar fácilmente el archivo DLL y hacer algunas cosas con él. A partir de lo que las respuestas han dicho que tal vez yo no debería estar usando un GUID, es que hay una .Net manera de hacer esto, entonces?

  • Bien ¿cómo piensa ‘buscar’ de ellos. Donde están almacenados, en el gac sobre las máquinas? si es así, entonces deben ser fuertemente nombre, si son sólo de los archivos, seguramente la base de datos almacena la ruta de acceso a ellos, punto en el que el guid no tiene sentido, excepto como una fase de validación…
InformationsquelleAutor robintw | 2009-01-28

5 Comentarios

  1. 0

    Para responder a la segunda pregunta (Guid -> asamblea) esto es simple, si el dll ya está cargado y sólo quiero encontrar lo que uno tenía un guid (si cualquier) usted puede simplemente hacer

    using System;
    using System.Reflection;
    using  System.Runtime.InteropServices;
    
    static Assembly FindAssemblyForGuid(Guid match)
    {
        foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
        {
            object[]  attributes = a.GetCustomAttributes(typeof(GuidAttribute)) ;
            if ( attributes.Length > 0 ) 
            {
                foreach (GuidAttribute g in attributes )
                {
                    if (g.Value == match)
                        return a;
                }
            }
        }
        return null; //failed to find it
    }

    Si quieres hacerlo sin se cargaba se debe cargar en un temporal del dominio de la aplicación, verificación, a continuación, suelte el dominio de la aplicación o uso no administrado la introspección de la api para hacer lo mismo pero sin la necesidad de liberación de la nada después.

  2. 4

    Creo que pueden confundirse entre los ensamblados administrados y componentes COM. COM utiliza Guid para identificar los componentes y las interfaces en la forma de Identificadores de clase (CLSID) y los Identificadores de interfaz (IID). La información se almacena en el registro y se utiliza para crear el objeto COM de los casos. .Neta no utilizar este mecanismo para identificar a las asambleas y a las clases. El análogo de registro de la situación es que las asambleas son fuerte con el nombre de y se almacena en el GAC. Hay varios lugares en los que los Guid son utilizado en la .Net – incluyendo la interoperabilidad COM – sin embargo, la asamblea de identificación no es uno de ellos.

    • Gracias por tu respuesta, he actualizado la pregunta ahora a esperar que lo que yo estaba buscando un poco más claro.
  3. 2

    La [assembly: Guid(«…»)] atributo se define normalmente en su AssemblyInfo.cs archivo. De forma predeterminada, cuando se crea un nuevo proyecto de Visual Studio proporciona automáticamente un Guid para usted, pero esto es realmente sólo es útil si se va a exponer su asamblea COM. El .NET Framework en sí no utiliza este valor para determinar cómo cargar un ensamblado o en cualquier forma de interactuar con él.

  4. 0

    Como un usuario de Visual Studio, eche un vistazo a la AssemblyInfo.cs donde las asambleas GUID se define
    [assembly: Guid("abc...")]

  5. 0

    Creo que la pregunta que debemos hacernos es ¿por qué crees que necesita un GUID para su montaje? No carga por el GUID o registrar un CLSID a menos que sea COM-utilizable.

Dejar respuesta

Please enter your comment!
Please enter your name here