es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo vincular documentación de terceros en la creación de documentación de Sandcastle C#

Estoy creando la documentación para un complemento que he escrito, para una aplicación de terceros, que tiene su propia API que utilizo en mi complemento. La API está documentada en otro lugar (sitio web) y sé cómo generar URLs para cada uno de los tipos de API.

Durante la construcción de la documentación de mi complemento, SandCastle naturalmente se queja de la falta de tipos de API de terceros, ya que no están definidos en mi ensamblado de complemento y forman parte del ensamblado de API de la aplicación host a la que he referenciado en mi proyecto de complemento.

Me gustaría saber cómo puedo configurar SandCastle para resolver los tipos faltantes a la URL correcta e incluirlos en los archivos .chm o en el sitio web como hipervínculos.

SandCastle ya hace esto para todos los tipos de dotnet y los redirecciona a la documentación de MSDN correctamente. SandCastle parece tener resolutores de URL incorporados para estas fuentes conocidas internamente, pero no veo ninguna forma de extender eso y agregar mi propio resolutor.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para configurar SandCastle para resolver los tipos faltantes de una API de terceros y generar enlaces a la URL correcta, debes crear un resolvedor de reflexión personalizado. Este resolvedor instruye a SandCastle para resolver los tipos faltantes a su URL correspondiente en la API de terceros. Aquí te explico cómo puedes crear un resolvedor de reflexión personalizado en SandCastle:

    1. Crea un nuevo proyecto de biblioteca de clases en tu solución y añade una referencia al ensamblaje SHFB.dll.
    2. Añade una nueva clase al proyecto y hereda de la clase Microsoft.Ddue.Tools.Reflection.Resolver.Resolver2.

    3. Sobrescribe el método Resolve de la clase Resolver2 y añade código para resolver el tipo faltante a la URL correspondiente en la API de terceros. A continuación, te muestro un ejemplo de código:

    public override Type Resolve(string typeName, bool ignoreCase, AssemblyDef assemblyDef, TypeDef parentType, IXmlDocFeature xmlDoc)
    {
        string apiUrl = "http://third-party-api-url.com/";
    
        // Obtén el nombre del tipo y elimina el nombre del ensamblaje de este
        string[] typeNameParts = typeName.Split(',');
        string typeNameWithoutAssemblyName = typeNameParts[0].Trim();
    
        // Construye la URL para el tipo en la API de terceros
        string typeUrl = apiUrl + typeNameWithoutAssemblyName;
    
        // Crea un nuevo tipo de referencia para el tipo resuelto
        var typeReference = new TypeReference(typeNameWithoutAssemblyName, parentType) { ResolvedType = typeDef, Url = new Uri(typeUrl) };
    
        return typeReference;
    }
    
    1. Una vez que hayas creado el ensamblaje personalizado del resolvedor, haz referencia a él en tu proyecto de complemento en Visual Studio.

    2. Por último, configura SandCastle para usar el resolvedor de reflexión personalizado añadiendo la siguiente propiedad al archivo de proyecto de SandCastle:

    <reflectionresolvertype>CustomResolverNamespace.CustomResolverClass, CustomResolverAssemblyName</reflectionresolvertype>
    

    Reemplaza CustomResolverNamespace, CustomResolverClass y CustomResolverAssemblyName con los valores adecuados para tu resolvedor personalizado.

    Siguiendo estos pasos, SandCastle utilizará ahora el resolvedor de reflexión personalizado para resolver los tipos faltantes en la documentación de tu complemento a su URL correspondiente en la API de terceros.

Comments are closed.