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 añadir DLLs nativas a la implementación ClickOnce de una aplicación .NET

Llevo días intentando descubrir cómo incluir mis dependencias nativas de la DLL de C++ en mi implementación ClickOnce de una aplicación de formularios WinForms en C# creada con VS2019. Las DLL nativas no aparecen en Publicar -> Archivos de la aplicación en la página de Propiedades de la aplicación principal de .NET (aunque las DLL de .NET sí lo hacen).

He leído esto cien veces:

Configura la Acción de compilación de las DLL nativas como ‘Contenido’.

… y creo que lo estoy interpretando/haciendo mal.

La salida de los proyectos nativos de C++ no está “incluida” naturalmente en ningún proyecto (un requisito aparente para exponer la propiedad de Acción de compilación), por lo que no aparece en el Explorador de soluciones para permitirme configurarlo como ‘Contenido’. Así que hago esto:

[Explorador de soluciones] -> Proyecto -> Agregar -> Elemento existente -> [seleccionar DLL nativa de C++]

para agregar las DLL nativas de C++ al proyecto y habilitar la propiedad de Acción de compilación, que luego configuro como ‘Contenido’. {Nota importante: Debe estar “incluido” en un proyecto, no solo en la solución, para obtener la propiedad de Acción de compilación.}

Así que hago eso y funciona, pero por supuesto tuve que seleccionar una plataforma y configuración específica (por ejemplo, x64 y release) de la DLL nativa, y esta selección está fijada (no está controlada por las selecciones en la interfaz gráfica de VS2019 cuando compilo), y peor aún, ni siquiera está etiquetada para indicar qué plataforma y configuración está “incluida” en el proyecto. {Nota adicional: ¿Cómo no tuve que seleccionar qué versión (x86 vs x64) de las DLL de .NET usar en Publicar -> Archivos de la aplicación? ¿Simplemente elige automáticamente las correctas? ¿Cómo configuro una versión x86 y una versión x64 que pueda alternar y compilar cada una?} No puedo imaginar que esta sea la forma en que se supone que debe hacerse. Es frágil y opaco. Seguramente hay una mejor manera. Creo que estoy perdiendo algo que todos los demás encuentran “obvio”. Cualquier otro desarrollador que intente usar o mantener esta configuración maldirá mi nombre, y tendrá razón al hacerlo.

¿Cuál es la forma “correcta” de hacer que la implementación ClickOnce (a través de la interfaz gráfica de VS2019) incluya mis DLL nativas (cuyos proyectos están incluidos en la misma solución) en el paquete de implementación ClickOnce?

Nota: Encontré una configuración prometedora en la página de Propiedades de los proyectos nativos de C++: Configuración de compilación personalizada -> General -> Tratar la salida como contenido. Pero no parece tener ningún efecto.

Estaría eternamente agradecido por cualquier ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Visual Studio, DLL, implementación y ClickOnce, sugiero los siguientes pasos para incluir dependencias de DLL nativas de C++ en una implementación de ClickOnce de una aplicación C# WinForms construida con VS2019:

    1. Agrega las DLL nativas de C++ al proyecto yendo a Explorador de soluciones, seleccionando el proyecto y haciendo clic en Agregar > Elemento existente.
    2. Configura la Acción de construcción de las DLL nativas de C++ como Contenido yendo a Propiedades > Acción de construcción > Contenido.

    3. Asegúrate de que los proyectos de C++ nativos estén incluidos en la misma solución que la aplicación C# WinForms.

    4. Asegúrate de que la plataforma y la configuración coincidan entre la aplicación C# WinForms y las DLLs nativas de C++.

    5. Si la configuración “Tratar salida como contenido” no funciona, intenta utilizar la opción de Contenido como se describe en el paso 2 anterior.

    6. Verifica que las DLLs nativas de C++ aparezcan en Publicar > Archivos de la aplicación en la página Propiedades de la aplicación principal .NET.

    Siguiendo estos pasos, las dependencias de las DLLs nativas de C++ deberían incluirse en el paquete de implementación de ClickOnce de la aplicación C# WinForms.

Comments are closed.