2012-05-07 24 views
11

un error extraño:error MSB8011 de problemas: No se pudo registrar la salida

error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 744

Tengo este error al intentar utilizar OpenSceneGraph (OSG) en un control ActiveX. Una búsqueda en Google mostró todo tipo de soluciones que realmente no resolvieron el problema ni localizaron la causa exacta del error, así que me gustaría poner la solución en un solo lugar: aquí.

Encontré la solución y pronto responderé mi propia pregunta para que la gente pueda encontrar su solución si encuentra el mismo problema.

Respuesta

20

Este error ocurre cuando Visual Studio (2010) no puede encontrar los archivos dll dependientes que el programa necesita para crear el OCX. El OCX se crea en el directorio Debug del proyecto (para compilaciones de depuración) y especifica el "directorio de trabajo" (en la configuración del proyecto) como la carpeta donde están las DLL dependientes, no ayudará a Visual Studio a localizar las DLL.

Ahora la trampa es (esto es lo que hace que sea un dolor de cabeza para resolver el problema) que a veces, sin Visual Studio poder crear el OCX, no podrá ejecutar Dependency Walker en el OCX. Entonces nunca imaginarás que los DLL que faltan son el problema.

Si sabe qué DLL debe colocarse en la carpeta Debug, simplemente colóquelos allí, y el error desaparecerá. Si no sabe, y si su OCX no se creó, vaya a la configuración del proyecto> Enlazador> General> Registrar salida y establezca el valor a "No". Esto creará su OCX para usted, pero no pasará por el proceso de registrarlo, que es cuando necesita las DLL dependientes.

Una vez que haga doble clic en OCX y Dependency Walker le muestra las DLL que faltan con iconos de círculo amarillo, simplemente coloque esas DLL en la misma carpeta que el OCX, y su programa funcionará bien. Es así de simple.

+0

Muy útil. Obtener un OCX integrado y usar el "walker de dependencias" me ayudaron a identificar el problema: resulta que no tenía los archivos de 64 bits de los que dependía (se encontraron módulos con diferentes tipos de CPU). –

+0

¿Hay alguna forma de hacerlo sin copiar los dlls al directorio de depuración? Prefiero especificar otro directorio que contenga el dll, al igual que la propiedad adicional de directorios de la biblioteca que utiliza para encontrar la lib. – Steiny

+0

Es un problema común. Incluso quería una solución: http://stackoverflow.com/questions/4953843/why-cant-visual-studio-find-my-dll y también estos chicos http://stackoverflow.com/questions/2119539/ visual-studio-how-to-set-path-to-dll y http://stackoverflow.com/questions/428085/how-do-i-set-a-path-in-visual-studio – Nav

1

MSB8011 parece ser un error genérico planteado cada vez que regsvr32 encuentra un problema. En mi caso, regsvr32 salió con el código 4 cuando el registro por usuario se estableció en "Sí", pero el DLL que estaba creando no definió un punto de entrada DllInstall.

7

El problema podría ser que su proyecto intente registrar un objeto COM, pero no hay suficientes privilegios para hacerlo. En Windows 7 y 8, regsvr32 requiere permisos administrativos.

Lo que puede hacer es lo siguiente. Cree un acceso directo en su escritorio a C: \ Windows \ SysWOW64 \ cmd.exe (la consola de 32 bits). Haga clic derecho, Propiedades -> Avanzado -> seleccione Ejecutar como administrador. Inicie el acceso directo y asegúrese de que aparezca el Control de acceso del usuario y haga clic en Sí. Comience a construir desde esta ventana de consola especial.

1

También puede hacerlo a través de VS 2013 IDE iniciando este IDE desde el acceso directo de archivos de programa, Seleccione Visual Studio 2010/2013 y luego haga clic con el botón secundario y seleccione ejecutar como administrador, después de que IDE se inicie, abra su archivo de solución y compilelo , nunca se tiene este tipo de errores debido a regsrv32 registro DLL/COM

1

en la página Property ir a

Configuration Properties->Build Events->Post-Build Event

es posible que se refiere a ella como una /Service. Modificar las opciones como se muestra a continuación podría ayudar.

antes de la modificación:

Before modification

Después de la modificación:

After modification

Esto me ayudó, espero que le ayudará también.

0

Intenté usar ejecutar como "Administrador" VS 2015, es capaz de resolver el problema

Cuestiones relacionadas