2012-06-07 20 views
5

Recentemente ho installato la beta VS2011 per dare un'idea delle nuove funzionalità di C++ 11 che Microsoft aveva implementato nell'ultima versione del compilatore.Analisi codice VS2011

Ho avuto un problema inaspettato quando torno a utilizzare VS2010 però. Ho aperto un progetto di esempio di Windows SDK 7.1 in VS2010.

Ora, quando ho costruire in VS2010, ottengo il seguente output, che denota che è in esecuzione uno strumento di analisi del codice (apparentemente dopo la compilazione, ma prima il collegamento)

1>------ Rebuild All started: Project: MFCaptureToFile, Configuration: Debug Win32 ------ 
1> winmain.cpp 
1> capture.cpp 
1> Running Code Analysis for C/C++... 
1>capture.cpp(112): error C2220: warning treated as error - no 'object' file generated 
1>c:\program files\microsoft sdks\windows\v7.1\samples\multimedia\mediafoundation\mfcapturetofile\capture.cpp(105): warning C6309: Argument '3' is null: this does not adhere to function specification of 'IMFAttributes::GetAllocatedString' 
1>c:\program files\microsoft sdks\windows\v7.1\samples\multimedia\mediafoundation\mfcapturetofile\capture.cpp(105): warning C6387: 'argument 3' might be '0': this does not adhere to the specification for the function 'IMFAttributes::GetAllocatedString': Lines: 98, 103, 105 
1>c:\program files\microsoft sdks\windows\v7.1\samples\multimedia\mediafoundation\mfcapturetofile\capture.cpp(353): warning C6309: Argument '3' is null: this does not adhere to function specification of 'IMFAttributes::GetAllocatedString' 
1>c:\program files\microsoft sdks\windows\v7.1\samples\multimedia\mediafoundation\mfcapturetofile\capture.cpp(353): warning C6387: 'argument 3' might be '0': this does not adhere to the specification for the function 'IMFAttributes::GetAllocatedString': Lines: 336, 338, 340, 343, 351, 353 
1>C:\Program Files\Microsoft SDKs\Windows\v7.1\Include\ks.h(53): error C2220: warning treated as error - no 'object' file generated 
1>c:\program files\microsoft sdks\windows\v7.1\include\ks.h(53): warning C6244: Local declaration of 'GUID_NULL' hides previous declaration at line '28' of 'c:\program files\microsoft sdks\windows\v7.1\include\cguid.h' 
1> Generating Code... 
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 

ho tentato di determinare quali cambiamenti al progetto è stato eseguito lo strumento di analisi del codice, ma non riesco a trovare nulla nelle proprietà del progetto. Ho provato a ricaricare il progetto in VS2011, ma non c'è alcuna opzione per l'analisi del codice che possa essere disattivata (as suggested on MSDN).

Il progetto è completamente nativo C++, non ho mai usato C++ con CLR

Inoltre, ho provato ad aprire altri progetti (il mio) e ora stanno anche invocare questa fase di analisi del codice. Ciò impedisce la creazione a causa di problemi con il codice Microsoft in molti casi! Le build sembrano avere successo nella beta VS2011.

Qualcuno può offrire informazioni su come disattivare questo strumento di analisi del codice? Spero di lasciare la versione beta di VS2011 installata, quindi ti preghiamo di astenermi dal suggerire di disinstallarla, a meno che non sia l'unica opzione possibile!

risposta

12

Penso che solo VS2010 Ultimate supporti l'analisi del codice. Non ho VS2012 ma penso che dovresti modificare manualmente il file vcxproj.

Cercare uno o entrambi questi params se presenti all'interno del vostro file di progetto: <RunCodeAnalysis>true</RunCodeAnalysis> e <EnablePREfast>true</EnablePREfast>

Modificare entrambi i valori a false e dovrebbe funzionare.

Si prega di notare che questi nomi sono usati da VS2010 e non sono sicuro se lo hanno cambiato in VS2012.

+9

Wow. Sapevo che qualcuno avrebbe visto questo problema prima. Risposte come queste sono un omaggio a come funziona il sito. +1 – sehe

+0

+1 per oscure conoscenze – thecoshman

+0

L'analisi del codice statico è inclusa anche nell'edizione Professional e Premium: https://www.microsoft.com/visualstudio/11/de-de/products/compare I file di progetto di VS2012 e VS2010 sono completamente compatibili, quindi i nomi sono gli stessi. – habakuk