Error al compilar un proyecto en Visual Studio

Este artículo le ayuda a resolver el problema en el que no puede crear un proyecto basado en .NET Framework en Visual Studio.

Versión del producto original:   .NET Framework 4.5
Número KB original:   2956788

Síntomas

Imagine la siguiente situación:

  • Tiene una aplicación que se ha creado mediante un proyecto basado .NET Framework 4.0 en Microsoft Visual Studio.

  • Esta aplicación tiene un Visual Basic 6.0 ActiveX control.

  • Este control hace referencia a un Office ensamblado de interoperabilidad principal. Por ejemplo, un office.dll archivo.

  • Vuelve a dirigir el proyecto al .NET Framework 4.5.x en Visual Studio.

En este escenario, al compilar el proyecto, este programa de compilación no puede cargar el ensamblado de interoperabilidad del control. Además, recibirá un mensaje de error similar al siguiente:

Error de AxImp: no se puede resolver la dependencia del ensamblado 'office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' porque no se ha precargado. Al usar las API de ReflectionOnly, los ensamblados dependientes deben cargarse previamente o cargarse a petición a través del evento ReflectionOnlyAssemblyResolve.

Nota

Este problema solo se produce en el equipo que tiene el .NET Framework 4.0, el .NET Framework 4.5 o el .NET Framework 4.5.1 y el producto Microsoft Office instalado.

Causa

Este problema se produce debido a un cambio de diseño entre Common Language Runtime (CLR) 2.0 y CLR 4.0 sobre cómo se cargan las bibliotecas de tipos y las dependencias.

El .NET Framework 4.0 necesita que se carguen determinados ensamblados al resolver tipos de una biblioteca de tipos que haga referencia a un ensamblado de interoperabilidad principal. Sin embargo, ese no era el caso en el .NET Framework 2.0. El ActiveX no cambió el comportamiento entre el .NET Framework 2.0 y framework 4.0. Este cambio de diseño impide la generación de los ensamblados de interoperabilidad. Por lo tanto, ActiveX importador se ejecuta en Visual Studio, el importador no puede resolver ni precargar todas las referencias para este control ActiveX usuario.

Solución alternativa

Para evitar este problema, cree los ensamblados de interoperabilidad mediante AxImp.exe. Por ejemplo, el mensaje de error mencionado en la sección Síntomas indica que el ensamblado de Microsoft office requerido es la versión 12.0. Para resolver este problema, siga estos pasos:

  1. Busque el ensamblado Office en la caché global de ensamblados (GAC).

  2. Seleccione la ruta de acceso de la versión de office que se menciona en el mensaje de error. Será algo así como C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c .

  3. Ejecute el siguiente comando desde el símbolo Visual Studio de comandos para generar los nuevos ensamblados de interoperabilidad:

    aximp < **Name of Ocx** > /out: < **Interop assembly name** > /rcw: <C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c\office.dll>
    
  4. Agregue los ensamblados de interoperabilidad generados al proyecto Visual Studio mediante la Add References característica.

Nota

Si Office ensamblado de interoperabilidad principal no está instalado en el equipo, la herramienta AxImp.exe aún puede resolver los tipos sin ninguna ayuda, incluso cuando se ejecuta desde el proceso de compilación Visual Studio.

Más información

AxImp.exe es una herramienta de línea de comandos y está disponible con el Visual Studio. Esta herramienta acepta ensamblados de referencia como argumentos de línea de comandos. Por lo tanto, esta herramienta puede cargar los ensamblados adicionales que espera el .NET Framework 4.0.