válida visual una standard signatura seguro segura requisito referencia que puede programa previo para otra nombre net necesita marque manifiesto manera hacer firmado firma este estar ensamblado encuentra ejecutar debe con como certificados certificado cargar archivo almacén c++ visual-studio linker

c++ - visual - no se puede cargar el archivo o ensamblado net standard



¿Cómo puedo hacer un.exe completamente vinculado de forma estática con Visual Studio Express 2005? (4)

Mi entorno actual preferido de C ++ es la edición gratuita y en gran medida excelente de Microsoft Visual Studio 2005 Express. De vez en cuando, he enviado archivos .exe de lanzamiento a otras personas con resultados agradables. Sin embargo, recientemente hice el inquietante descubrimiento de que los resultados agradables se basaban en más suerte que me gustaría. Intentar ejecutar uno de estos programas en un antiguo (2001 vintage, no actualizado escrupulosamente) cuadro de XP no me dio nada más que un desagradable "El sistema no puede ejecutar x.exe" (o similar) mensaje.

Algunas búsquedas en Google revelaron que con este conjunto de herramientas, incluso especificando los resultados de enlaces estáticos en un hello-world.exe simple, realmente confiando en archivos .dll adicionales (msvcm80.dll, etc.). Un sistema de elaboración de versiones increíblemente elaborado (¿alguno de los archivos de manifiesto?) No permitirá que el .exe se ejecute sin las versiones .dll correctas. No quiero ni necesito esto, solo quiero un archivo .exe autocontenido a la antigua que no haga más que las operaciones de Win32 de denominador común más bajo y se ejecute en cualquier SO viejo win32.

¿Alguien sabe si es posible hacer lo que quiero hacer con mi conjunto de herramientas existente?

Gracias.


En lo que respecta a la respuesta de Jared, tener Windows 2000 o superior no necesariamente solucionará el problema. La respuesta de Rob funciona, sin embargo, es posible que esta solución introduzca problemas de seguridad, ya que las actualizaciones de Windows no podrán parchear aplicaciones creadas como tales.

En otra publicación, Nick Guerrera sugiere empaquetar Visual C ++ Runtime Redistributable con sus aplicaciones, que se instala rápidamente y es independiente de Visual Studio.


He tenido este mismo problema de dependencia y también sé que puede incluir las DLL VS 8.0 (¡solo versión! No depurada! --- y su programa también debe ser lanzado) en una carpeta con el nombre apropiado, en el carpeta principal con su .exe:

Cómo: implementar mediante XCopy (MSDN)

También tenga en cuenta que se garantiza que las cosas saldrán mal si necesita tener códigos C ++ y C en el mismo .exe estáticamente enlazado porque obtendrá conflictos de enlazadores que solo se pueden resolver ignorando el libXXX.lib correcto y luego vinculando dinámicamente (DLL) .

Por último, con un conjunto de herramientas diferente (VC ++ 6.0) las cosas "simplemente funcionan", ya que Windows 2000 y posteriores tienen las DLL correctas instaladas.


Mi experiencia en Visual Studio 2010 es que hay dos cambios necesarios para no necesitar DLL. Desde la página de propiedades del proyecto (haga clic con el botón derecho en el nombre del proyecto en la ventana del Explorador de soluciones):

  1. En Propiedades de configuración -> General, cambie el campo "Uso de MFC" a "Usar MFC en una biblioteca estática".

  2. En Propiedades de configuración -> C / C ++ -> Generación de código, cambie el campo "Biblioteca de tiempo de ejecución" a "Multi-Threaded (/ MT)"

No estoy seguro de por qué ambos fueron necesarios. Usé esto para eliminar una dependencia en glut32.dll.

Agregado después: cuando realice estos cambios en las configuraciones, debe hacerlas en "Todas las configuraciones" --- puede seleccionar esto en la parte superior de la ventana de Propiedades. Si realiza el cambio solo a la configuración de depuración, no se aplicará a la configuración de la versión y viceversa.


Para el C-runtime, vaya a la configuración del proyecto, elija C / C ++ y luego ''Generación de código''. Cambie la configuración de ''biblioteca de tiempo de ejecución'' a ''multihilo'' en lugar de ''dll multiproceso''.

Si está utilizando otras bibliotecas, puede que necesite decirle al vinculador que ignore explícitamente el CRT vinculado dinámicamente.