Pregunta Resolviendo el problema de reconstrucción AlwaysCreate de Visual Studio 2010


Tengo un proyecto de C ++ que actualmente transfiero de VS2008 a VS2010. Cuando construyo el proyecto, Visual Studio 2010 informa que la construcción fue exitosa, pero si presiono F5 para iniciar el depurador, me dicen que el proyecto no está actualizado. Si ignoro esta advertencia, puedo seguir eliminando errores, pero si presiono Aceptar, se reconstruye todo el proyecto (muchos cientos de archivos fuente) desde cero. El resultado contiene lo siguiente;

1>------ Build started: Project: SCCW-VC2010, Configuration: Debug Win32 ------
1>Build started 15/11/2010 14:47:40.
1>InitializeBuildStatus:
1>  Creating "Debug\SCCW-VC2010.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Midl:
1>  All outputs are up-to-date.
1>ClCompile:
1>  tinedit.cpp
1>  _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1>  Automatically linking with sfl504d.lib
1>  Automatically linking with ot1104d.lib
1>c:\program files\rogue wave\stingray studio 10.4\include\toolkit\sectndlg.h(134): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files\microsoft visual studio 10.0\vc\include\string.h(105) : see declaration of 'strcpy'
1>  Automatically linking with og1204d.lib
1>  Automatically linking with RWUXThemeD10.lib
1>  profile.cpp
1>  ZOffsetDialog.cpp

Media hora más tarde, una vez que la compilación finaliza, se inicia el depurador. Mi conjetura es que el mensaje

Creando "Debug \ SCCW-VC2010.unsuccessfulbuild" porque se especificó "AlwaysCreate".

es parte del problema, pero no puedo vincular esto a una configuración de proyecto. He encontrado algo de ayuda en google, pero nada que haya funcionado hasta ahora. ¿Alguien más tenía este problema y sabía de una solución?

Editar:  Según la sugerencia de Jalf en los comentarios a continuación, he creado una nueva proyección, importé todos mis archivos en ese proyecto, y el nuevo proyecto tiene los mismos problemas. Específicamente, copié en todos los siguientes grupos;

<ClCompile Include="..\MyDir\MyFile.cpp"/>
<ClInclude Include="..\MyDir\MyFile.h" />
<None Include="res\MyFile.ico" />  (and all similar resources)
<Library Include="..\MyDir\MyFile.lib" />

Edit2:  Después de revisar todo el encabezado, finalmente encontré 3 que no existían. Quitarlos y hacer una reconstrucción en el proyecto original parece haber solucionado el problema. Algunas de las publicaciones de blog que mencionan este problema se refieren a ella como un error, y dos días de tiempo perdido más tarde, tiendo a estar de acuerdo. Gracias por las respuestas y comentarios proporcionados.

Edit3:  ¡Y un día después el problema está de vuelta! Hacer una edición de cualquier archivo en el proyecto una vez más provoca una reconstrucción completa. Según la respuesta de John Dibling, el proyecto incluye algunas bibliotecas estáticas, incluida Stingray. Estoy abandonando VS2010 y volviendo a VS2008, ya que tengo fechas límite. Para obtener información relacionada, consulte los siguientes enlaces;

VS2010 siempre piensa que el proyecto está desactualizado, pero nada ha cambiado

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318

http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx

Final Edit  El lanzamiento de VS2010 SP1 ha resuelto este problema, y ​​las compilaciones ahora son rápidas y eficientes.


17
2017-11-15 15:05


origen


Respuestas:


He tenido este problema muchas veces y siempre fue frustrante. Te diré cuál fue el problema en mi caso, pero primero tengo que preguntarte:

  • ¿Hiciste una reconstrucción, todo antes de intentar ejecutar la primera vez, o simplemente una reconstrucción?
  • Una vez que haya reconstruido todo, ¿le pedirá una vez más que reconstruya si no ha realizado ningún cambio?

El problema en mi caso era algo complejo. Tenía reglas de compilación personalizadas que copiaban los binarios de Stingray desde su directorio de origen (donde vivían) a un directorio en mi árbol de compilación. Los binarios se marcaron como una dependencia, por lo que se copiaron antes de cada compilación en caso de que cambiasen.

La dependencia comprobada miró las marcas de tiempo de estos archivos para ver cuándo se modificaron. Si el blah.libtenía una fecha mod de diciembre pasado en su directorio de origen, luego, cuando se copió, tendría la misma fecha de modificación. La dependencia comprobada notaría que "oye este archivo es bastante viejo, tenemos que reconstruirlo", y luego me preguntaría si quería hacer una reconstrucción completa.

Por un tiempo, me salí diciendo "No", pero finalmente arreglé el problema cambiando la regla de compilación personalizada para escribir un nuevo archivo de texto después de copiar el archivo. Eso haría que el nuevo archivo de texto sea la dependencia, y no el archivo blah.lib archivo, y hizo feliz al compilador.


8
2017-11-15 15:14



  1. Ver en la ventana de salida qué archivo es reconstruido

  2. Ir al menú Tools->Options, luego navega hacia Project and Solutions->Build and Run. Cambiar opción MSBuild Project build output verbosity a:

    Diagnostic
    
  3. Build, log de larga duración

  4. Encuentra el archivo (de 1) en el registro, lee el diagnóstico. Puede encontrar, por ejemplo, el nombre del encabezado que tiene fecha futura o ausente.


12
2018-05-30 13:14



Tuve el mismo problema en proyectos convertidos y desde cero. Recibí una pista de una página de MS sobre archivos perdidos. Revisé mi proyecto y descubrí que hacía referencia a un archivo que no existía. Se reemplazó con el archivo correcto y el problema desapareció.


5
2018-03-02 21:51



Sé que esta es una publicación muy, muy antigua, pero para el beneficio de todos los que todavía tienen este problema, decidí publicar mi opinión. porque se especificó "AlwaysCreate" no tiene nada que ver con la reconstrucción del proyecto.

Es al revés. Si usted o Visual Studio deciden reconstruir todo, esto provoca la creación del archivo "* .unsuccessfulbuild".

Algún otro problema (por lo general, el encabezado que no existe) provocará que se vuelva a generar todo lo que lleva a la visualización porque se especificó "AlwaysCreate".

"AlwaysCreate" forma parte de la configuración del entorno de compilación de Visual Studio y es parte del archivo XML Microsoft.CppBuild.targets. Contiene la siguiente línea: toca AlwaysCreate = "true" Files = "$ (LastBuildUnsuccessful)" /

Esto está configurado como verdadero "El archivo .unsuccessfulbuild "siempre se creará independientemente de si la compilación tiene éxito o no. Si esto se cambia a falso,".unsuccessfulbuild no se crea. Si es verdadero, el archivo * .unsuccessfulbuild se crea como vacío durante el proceso de compilación y luego se elimina si la compilación se realiza correctamente. No estoy seguro de por qué se creó este archivo; incluso si la compilación tiene errores, el archivo está vacío pero no eliminado, como en el caso de la compilación exitosa.

Posiblemente, la existencia de este archivo tenga algún significado conocido solo para el entorno de compilación VS. Si desea jugar con esta configuración, elimine la tecla táctil de     


3
2018-01-07 18:31



los Documentos de MSDN implica que esta propiedad es específica para proyectos de implementación.

findstr /si AlwaysCreate en su proyecto VS2010, los archivos le mostrarán los culpables si no puede rastrearlos en la GUI.


2
2017-11-15 15:12



Decidió volver a visitar esto con la versión de lanzamiento de SP1. Recreé un nuevo proyecto desde cero, que salió en 81k en comparación con el proyecto anterior mejorado de 1.4mb que llevaba todo tipo de basura con él. Inicialmente, me encontré con el mismo problema, pero logré resolverlo de la siguiente manera;

  • Se cambiaron los encabezados precompilados a Crear (/ Yc) 
  • Compilado un archivo fuente
  • Se cambiaron los encabezados precompilados a Usar (/ Yu) 
  • Hizo una reconstrucción completa

El siguiente problema que noté fue que cualquier adición de recursos estaba causando una recompilación de todos los archivos que contenían recursos incluidos.h Esto se solucionó usando los consejos de los siguientes Microsoft connect thread y agregando manualmente las siguientes líneas a mi proyecto;

<ItemGroup>
    <ClNoDependencies Include="Resource.h" />
</ItemGroup>

0
2017-08-10 12:00



En mi caso, pareció ayudar a construir el (los) proyecto (s) de implementación. Los configuré para que no se construyan cuando golpeé F7 pero de forma manual. Algunas personas sugieren crear una nueva solución + proyectos, pero esa no es una opción muy buena cuando los proyectos tienen muchas modificaciones manuales y reglas de compilación personalizadas.


0
2017-07-15 07:59



El enlace está en uno de los comentarios aquí, pero es fácil de perder, así que vuelvo a publicar los pasos básicos desde este enlace: Artículo de MSDN

De hecho, encontré este enlace por mi cuenta, y solo más tarde me di cuenta de que esto ya se había mencionado aquí.

1. Since it can be difficult to recover from a damaged devenv.exe.config file, consider copying the file to devenv.exe.config.original before modifying it so you have a backup copy you can revert to if things go awry.
2. Open your VisualStudioInstallFolder\Common7\IDE\devenv.exe.config file.  Note this will be in %ProgramFiles(x86)% on 64-bit Windows.
3. Open a text editor with admin privileges.
4. Add this snippet to your devenv.exe.config file just below the <configSections /> block:
    For Visual Studio 2012 and below...
    <system.diagnostics>
    <switches><add name="CPS" value="4" /></switches>
    </system.diagnostics>
    For Visual Studio 2013
    <system.diagnostics>
    <switches><add name="CPS" value="Verbose" /></switches>
    </system.diagnostics>
5. Save the text file.

Uso Visual Studio 2010 + SP1 y parece que ambos fragmentos XML funcionan.

Ahora necesita una herramienta que pueda mostrar Windows DebugOutput como DebugView.

1. Start DebugView 
2. Rebuild
3. Build
4. In DebugView window search for the string ‘missing’ or 'not up to date', better still to save the DebugView log entries and open it in notepad and then search.

0
2018-06-17 09:38