vscode visual studio orthography instalar color code visual-studio-2010 c++-cli preprocessor clr

visual-studio-2010 - orthography - visual studio code path intellisense



El enlazador CLR/CLI falla con el error LNK2022-Los atributos personalizados no son consistentes (3)

Entorno: Visual Studio 10, CLR/CLI Class Library , creado con Platform Toolset v100 , marco de segmentación versión v3.5 .

Soy consciente de que esta pregunta ya fue formulada aquí, pero no encontré una respuesta que resolviera el problema en mi caso, por lo que planteé esto nuevamente.

Al CLR/CLI Class Library (DLL) un proyecto CLR/CLI Class Library (DLL) , el enlazador está fallando con los siguientes errores:

MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f7). MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000fb). MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c000128). MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c00012c). MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000ee). MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f1). LINK : fatal error LNK1255: link failed because of metadata errors


Elimine la definición _WIN32_WINNT=0x0500 del preprocesador C / C ++

Aparentemente, por alguna razón, la definición anterior del preprocesador no concuerda con el enlazador, lo que causa los errores del enlazador. Supongo que esto es un error interno de Microsoft (?), Pero no estoy seguro. De todos modos, después de eliminar esta definición del preprocesador, todo está construido y vinculado correctamente.

Espero que esta información sea útil.


Otra cosa que aprendí en el camino es que no se pueden mezclar los valores de Platform Toolset y Target Framework Version .

Las posibles combinaciones que encontré fueron:

.NET 3.5 o menos:

  • Platform Toolset : v90 , que usará los binarios de ejecución de Visual Studio 2008 ,
  • TargetFrameworkVersion : v3.5 (o menos),
  • En el preprocesador puede tener definido _WIN32_WINNT (por ejemplo, _WIN32_WINNT=0x0500 )

.NET 4.0 o superior:

  • Platform Toolset : v100 , que usará los binarios de tiempo de ejecución de Visual Studio 2010 ,
  • TargetFrameworkVersion : v4.0 (o superior),
  • En el preprocesador, no debe tener el ''_WIN32_WINNT = 0x0500'' definido

Cómo definir estos valores:

  1. Platform Toolset : encuéntrelo en: Configuración del proyecto | General,
  2. TargetFrameworkVersion : TargetFrameworkVersion el proyecto, haga clic derecho en el proyecto descargado y seleccione ''Editar''. Una vez que el archivo ''*. * Proj'' está abierto, modifique la siguiente línea: <TargetFrameworkVersion>v3.5<TargetFrameworkVersion/>

Tenía algunos archivos de encabezado en algunas de las unidades de compilación que configuran la versión de Windows:

#define _WIN32_WINNT 0x0501

El problema fue con las otras unidades de compilación (archivos c ++) que no establecieron esa variable, por lo que el error LNK2022 se queja de que la misma estructura se compila de diferentes maneras en varias unidades de compilación (diferentes archivos cpp).

Así que no puedo _WIN32_WINNT definición de _WIN32_WINNT , por lo que mi solución fue completamente opuesta a la sugerida anteriormente.

Lo configuré para todo el proyecto, por lo que todas las unidades de compilación se compilan de la misma manera.
propiedades del proyecto -> C / C ++ -> Preprocesador -> Definiciones del preprocesador

_WIN32_WINNT=0x0501;