Running Code Analysis (FxCop> 10) su build agent senza installare Visual Studio

Dopo FxCop 10 Microsoft ha smesso di spedire un programma di installazione separato per FxCop. Attualmente è ansible eseguire solo l’analisi del codice (FxCop 12.0 / 14.0 / 15.0) dopo l’installazione di Visual Studio 2013/2015 / 2017. Tuttavia, siamo fermamente convinti di non installare Visual Studio sugli agenti di compilazione (l’installazione deve quindi essere conservata sincronizzarsi con ciò che abbiamo sui computer degli sviluppatori, ecc.).

Quindi, come faccio a far funzionare FxCop 12.0 / 14.0 / 15.0 su un build agent, preferibilmente senza installare altro? Accetterei di aggiungere alcuni file binari e msbuild al controllo del codice sorgente, comunque. Altrimenti: c’è un modo per installare solo le cose FxCop usando l’installer di Visual Studio 2013/2015/2017?

Nota: stiamo usando Teamcity come server di build.

risposte

Poiché esistono più risposte valide per ambienti specifici e versioni di FxCop, mi sono permesso di collegarle qui per un accesso più semplice:

  • FxCop 15.0 (Visual Studio 2017)
  • FxCop 14.0 (Visual Studio 2015)
  • FxCop 12.0 (Visual Studio 2013)
  • SonarQube

Per FxCop 14.0 / VS2015 vedi questa risposta


Eseguire FxCop 12.0 senza installare Visual Studio 2013

Ok, ho investito 6 ore e ora funziona. Ho aggiunto tutti gli eseguibili, le DLL e gli obiettivi msbuild necessari al controllo del codice sorgente.

Questi sono i file che ho dovuto aggiungere al controllo del codice sorgente: (Si prega di considerare che ciò potrebbe violare alcuni accordi di licenza)

(source control)\dev\tools\FxCop │ ├[amd64] │ │ │ └msdia120.dll ├[Engines] │ │ │ ├IntrospectionAnalysisEngine.dll │ └PhoenixAnalysisEngine.dll ├[Msbuild] │ │ │ ├fxcoptask.dll │ ├Microsoft.CodeAnalysis.Targets │ ├Microsoft.VisualStudio.CodeAnalysis.dll │ └Microsoft.VisualStudio.CodeAnalysis.Sdk.dll ├[Repository] │ │ │ ├[Compatibility] │ │ │ │ │ ├Desktop2.0.xml │ │ ├Desktop2.0SP1.xml │ │ ├Desktop2.0SP2.xml │ │ ├Desktop3.0.xml │ │ ├Desktop3.0SP1.xml │ │ ├Desktop3.0SP2.xml │ │ ├Desktop3.5.xml │ │ └Desktop3.5SP1.xml │ └system32.bin ├[Rules] │ │ │ ├DataflowRules.dll │ ├DesignRules.dll │ ├GlobalizationRules.dll │ ├InteroperabilityRules.dll │ ├MaintainabilityRules.dll │ ├MobilityRules.dll │ ├NamingRules.dll │ ├PerformanceRules.dll │ ├PortabilityRules.dll │ ├ReliabilityRules.dll │ ├SecurityRules.dll │ ├SecurityTransparencyRules.dll │ └UsageRules.dll ├[Xml] │ │ │ ├CodeAnalysisReport.xsl │ ├FxCopReport.xsl │ └VSConsoleOutput.xsl ├Architecture-msil.dll ├CodeAnalysis.dll ├CustomDictionary.xml ├FxCopCmd.exe ├FxCopCmd.exe.config ├FxCopCommon.dll ├FxCopSdk.dll ├Microsoft.Cci.dll ├Microsoft.VisualStudio.CodeAnalysis.Common.dll ├Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll ├Microsoft.VisualStudio.CodeAnalysis.dll ├Microsoft.VisualStudio.CodeAnalysis.Interop.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml ├msdia120.dll ├mssp7en.dll ├mssp7en.lex ├phx.dll └Runtime-vccrt-win-msil.dll 

Copiali come segue:

  • intero contenuto della cartella di installazione di FxCop da

    %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop

  • da Visual Studio 2013 C ++ redist, o qualsiasi altro luogo: (vedi anche informazioni legali ) copia msdia120 x86 e x64 a:

    msdia120.dll (874 KiB)

    amd64 \ msdia120.dll (1.07 MiB)

  • dalla Global Assembly Cache ( C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\ ) di un computer su cui è installato VS2013, copiare le seguenti DLL in: (Assicurarsi che le DLL siano la versione 12.0!)

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • Tutti i file da %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis a

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

(Inoltre è necessario l’appropriato SDK di Windows (7.1 / 8.1) per creare l’applicazione .net 4.0 / 4.5 installata sull’agent build)

Inoltre abbiamo dovuto adattare il file msbuild del progetto come segue:

    

E questo è ciò che il nostro Custom.CodeAnalysis.targets contiene:

    en-US  $(SourcesDir)Custom.ruleset  $(ToolsDir)FxCop\  $(CodeAnalysisPath)Msbuild\Microsoft.CodeAnalysis.Targets    false true       

!! Per FxCop 12.0 / VS2013 vedi questa risposta !!

Eseguire FxCop 14.0 senza installare Visual Studio 2015

Prerequisiti:

  • MSBuild 14.0 -> Installa Microsoft Build Tools 2015
  • Visual C ++ Redistributable per Visual Studio 2015 x86 (la versione x86 è sempre richiesta, a seconda della versione x64 potrebbe essere necessaria anche la redisting. Se manca il messaggio di errore può essere criptico, ad esempio System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. The specified module could not be found. ). Invece di installare l’intero redist, potresti anche copiare separatamente le DLL necessarie, ma a questo punto non so quali siano necessarie. È piuttosto difficile e dispendioso in termini di tempo per scoprire quali sono esattamente mancanti.

A seconda di cosa vuoi build:

  • Windows SDK appropriato, ad esempio Windows 10 SDK
  • SDK / target .net appropriati (.NET Framework 4.6 SDK è incluso in Windows 10 SDK)

File da aggiungere al controllo del codice sorgente

Questi sono i file che ho dovuto aggiungere al controllo del codice sorgente: (Si prega di considerare che ciò potrebbe violare alcuni accordi di licenza)

 (source control)\tools\FxCop14 │ ├[Engines] │ │ │ ├IntrospectionAnalysisEngine.dll │ └PhoenixAnalysisEngine.dll ├[Msbuild] │ │ │ ├fxcoptask.dll │ ├Microsoft.CodeAnalysis.Targets │ ├Microsoft.VisualStudio.CodeAnalysis.dll │ └Microsoft.VisualStudio.CodeAnalysis.Sdk.dll ├[Repository] │ │ │ ├[Compatibility] │ │ │ │ │ ├Desktop2.0.xml │ │ ├Desktop2.0SP1.xml │ │ ├Desktop2.0SP2.xml │ │ ├Desktop3.0.xml │ │ ├Desktop3.0SP1.xml │ │ ├Desktop3.0SP2.xml │ │ ├Desktop3.5.xml │ │ └Desktop3.5SP1.xml │ └system32.bin ├[Rules] │ │ │ ├DataflowRules.dll │ ├DesignRules.dll │ ├GlobalizationRules.dll │ ├InteroperabilityRules.dll │ ├MaintainabilityRules.dll │ ├MobilityRules.dll │ ├NamingRules.dll │ ├PerformanceRules.dll │ ├PortabilityRules.dll │ ├ReliabilityRules.dll │ ├SecurityRules.dll │ ├SecurityTransparencyRules.dll │ └UsageRules.dll ├[x64] │ │ │ └msdia140.dll (1349 KB) ├[Xml] │ │ │ ├CodeAnalysisReport.xsl │ ├FxCopReport.xsl │ └VSConsoleOutput.xsl ├Architecture-msil.dll ├CodeAnalysis.dll ├CustomDictionary.xml ├FxCopCmd.exe ├FxCopCmd.exe.config ├FxCopCommon.dll ├FxCopSdk.dll ├Microsoft.Cci.dll ├Microsoft.VisualStudio.CodeAnalysis.Common.dll ├Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll ├Microsoft.VisualStudio.CodeAnalysis.dll ├Microsoft.VisualStudio.CodeAnalysis.Interop.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml ├msdia140.dll (1057 KB) ├mssp7en.dll ├mssp7en.lex ├phx.dll └Runtime-vccrt-win-msil.dll 

Copiali come segue:

  • intero contenuto della cartella di installazione di FxCop da

    %programfiles(x86)%\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop

  • da Visual Studio 2015 C ++ redist, o qualsiasi altro luogo: (vedi anche informazioni legali ) copia msdia140 x86 e x64 a:

    msdia140.dll (1057 KiB)

    amd64 \ msdia140.dll (1349 KiB)

  • dalla Global Assembly Cache ( C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\ ) di un computer su cui è installato VS2015, copiare le seguenti DLL in: (Assicurarsi che le DLL siano la versione 14.0!)

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • Tutti i file da %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis a

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

Inoltre ho regolato il file msbuild del progetto (* .csproj) come segue (suggerimento: sto leggermente deviando dal modo in cui l’ho fatto in precedenza con VS2013. Non è perché FxCop 14 funziona in modo diverso ma piuttosto perché in questo modo posso includere fxcop da un pacchetto nuget e utilizza la funzionalità standard di nuget per l’importazione di file .targets in .csproj):

     

E questo è ciò che il nostro Custom.CodeAnalysis.targets contiene:

      ..\FxCop14\ en-US $(SolutionDir)FxCop.ruleset   true true           

Utilizzando FxCop per l’analisi SonarQube senza installare Visual Studio

Se nel proprio profilo di qualità SonarQube sono triggerste regole FxCop, SonarQube richiede FxCop 14.0.

Questi passaggi sono in gran parte basati sulla risposta eccezionale di @BatteryBackupUnit:

  1. Installare Microsoft Build Tools 2015 sul computer di creazione.

  2. Installare Microsoft Visual C ++ 2015 Redistributable Update 3 , entrambi x86 e x64, sul computer di creazione.

  3. Importare il seguente file di registro (aggiornare la lettera di unità se non C 🙂 sul computer di costruzione:

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WDExpress\14.0\Setup\EDev] "StanDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\" "FxCopDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\FxCop\\" 
  1. Copia tutti gli strumenti %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools (non solo la sottodirectory FxCop) nello stesso posto sul computer di compilazione.

  2. Copia %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis nello stesso posto sul computer di creazione.

  3. Dalla Global Assembly Cache (C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL_NameOfTheAssembly_) di un computer su cui è installato VS2015, copiare Microsoft.VisualStudio.CodeAnalysis.dll e Microsoft.VisualStudio.CodeAnalysis.Sdk.dll (assicurarsi che le DLL sono la versione 14.0!). Copiare in C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis sul computer di creazione o installare nel GAC del computer di compilazione.

Se vedi Phx.FatalError dopo tutto questo – c’è un ultimo rituale … Copia vs_profiler_x64_enu.exe da Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setups e installalo sul computer di costruzione.

Scostamenti dalle istruzioni di @ BatteryBackupUnit:

  1. È necessaria l’intera directory degli Static Analysis Tools , non solo la sottodirectory FxCop.
  2. Invece di nidificare una sottocartella Msbuild sotto FxCop, è necessario posizionarlo nella posizione originale.
  3. Copiare i file msdia120.dll e amd64\msdia140.dll nella directory FxCop sembra non necessario purché sia ​​installato Visual C ++ 2015 Redistributable.
  4. Nessuna modifica relativa al file FxCop nel file di progetto (* .csproj).
  5. Nessun file Custom.CodeAnalysis.targets .

C’è un modo molto semplice per TFS :

Sulla macchina di compilazione, aggiungi una variabile di ambiente: FXCOPDIR , FXCOPDIR su: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop (copia semplicemente questa cartella dalla tua macchina di sviluppo).

In questa directory c’è un file chiamato: FxCopCmd.exe e TFS Build lo preleva automaticamente, anche se vs non è installato. Potrebbe essere necessario riavviare il server una o due volte, ma alla fine la build funzionerà. È inoltre necessario assicurarsi che due DLL siano installate sul gac: Microsoft.VisualStudio.CodeAnalysis.dll e Microsoft.VisualStudio.CodeAnalysis.Sdk.dll Il primo si trova nel percorso menzionato sopra, ma il secondo, il l’unico modo in cui l’ho afferrato è che l’ho preso dal gac sulla mia macchina dev. (puoi disabilitare la vista della cartella gac speciale, modificando il registro, ma solo google).

Eseguire FxCop 15.0 senza installare Visual Studio 2017

Prerequisiti:

  • MSBuild 15.0 -> Installa Microsoft Build Tools 2017 , potresti anche voler vedere qui
  • Visual C ++ Redistributable per Visual Studio 2017 x86 o qui OPPURE Visual Studio 2017 con C ++. —- Nota : la versione x86 è sempre richiesta, a seconda della versione x64 potrebbe essere richiesta anche la redistribuzione. Se manca il messaggio di errore può essere criptico, ad esempio System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. The specified module could not be found. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. The specified module could not be found. ). Invece di installare l’intero redist, potresti anche copiare separatamente le DLL necessarie, ma a questo punto non so quali siano necessarie. È piuttosto difficile e dispendioso in termini di tempo per scoprire quali sono esattamente mancanti.

A seconda di cosa vuoi build:

  • Windows SDK appropriato, ad esempio Windows 10 SDK
  • SDK / target .net appropriati (.NET Framework 4.6 SDK è incluso in Windows 10 SDK)

File da aggiungere al controllo del codice sorgente

Questi sono i file che ho dovuto aggiungere al controllo del codice sorgente: (Si prega di considerare che ciò potrebbe violare alcuni accordi di licenza)

 (source control)\tools\FxCop15 │ ├[Engines] │ │ │ ├IntrospectionAnalysisEngine.dll │ └PhoenixAnalysisEngine.dll ├[Msbuild] │ │ │ ├fxcoptask.dll │ ├Microsoft.CodeAnalysis.Targets │ ├Microsoft.VisualStudio.CodeAnalysis.dll │ └Microsoft.VisualStudio.CodeAnalysis.Sdk.dll ├[Repository] │ │ │ ├[Compatibility] │ │ │ │ │ ├Desktop2.0.xml │ │ ├Desktop2.0SP1.xml │ │ ├Desktop2.0SP2.xml │ │ ├Desktop3.0.xml │ │ ├Desktop3.0SP1.xml │ │ ├Desktop3.0SP2.xml │ │ ├Desktop3.5.xml │ │ └Desktop3.5SP1.xml │ └system32.bin ├[Rules] │ │ │ ├DataflowRules.dll │ ├DesignRules.dll │ ├GlobalizationRules.dll │ ├InteroperabilityRules.dll │ ├MaintainabilityRules.dll │ ├MobilityRules.dll │ ├NamingRules.dll │ ├PerformanceRules.dll │ ├PortabilityRules.dll │ ├ReliabilityRules.dll │ ├SecurityRules.dll │ ├SecurityTransparencyRules.dll │ └UsageRules.dll ├[x64] │ │ │ └msdia140.dll (1349 KB) ├[Xml] │ │ │ ├CodeAnalysisReport.xsl │ ├FxCopReport.xsl │ └VSConsoleOutput.xsl ├Architecture-msil.dll ├CodeAnalysis.dll ├CustomDictionary.xml ├FxCopCmd.exe ├FxCopCmd.exe.config ├FxCopCommon.dll ├FxCopSdk.dll ├Microsoft.Cci.dll ├Microsoft.VisualStudio.CodeAnalysis.Common.dll ├Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll ├Microsoft.VisualStudio.CodeAnalysis.dll ├Microsoft.VisualStudio.CodeAnalysis.Interop.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll ├Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml ├msdia140.dll (1057 KB) ├mssp7en.dll ├mssp7en.lex ├phx.dll └Runtime-vccrt-win-msil.dll 

Copiali come segue:

  • intero contenuto della cartella di installazione di FxCop da

    %programfiles(x86)%\Microsoft Visual Studio\2017\ **INSERT EDITION HERE** \Team Tools\Static Analysis Tools\FxCop

  • da Redistore Visual Studio 2017 C ++ (o dall’installazione di Visual Studio 2017, se è stato installato il carico di lavoro VC ++:% ProgramFiles (x86)% \ Microsoft Visual Studio \ 2017 \\ VC \ Redist \ MSVC \ 14.12.25810) o qualsiasi altro luogo: (vedi anche informazioni legali ) copia msdia140 x86 e x64 (il mio ha la versione 14.12.25810.0) a:

    msdia140.dll (1.12 MiB)

    amd64 \ msdia140.dll (1,42 MiB)

  • Tutti i file da %programfiles(x86)%\\Microsoft Visual Studio\2017\ **INSERT EDITION HERE** \MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis su

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

Inoltre ho regolato il file msbuild del progetto (* .csproj) come segue:

     

E questo è ciò che il nostro Custom.CodeAnalysis.targets contiene:

      ..\FxCop15\ en-US $(SolutionDir)FxCop.ruleset   true true       

Note per i percorsi di Visual Studio:

Il percorso per l’installazione di Visual Studio dipende dall’edizione. Include Professional ed Enterprise. AFAIR l’edizione della comunità ha un percorso diverso, ma non supporta FxCop. Correzioni 🙂