Ejecutar Code Analysis (FxCop> 10) en el agente de comstackción sin instalar Visual Studio

Después de FxCop 10, Microsoft dejó de enviar un instalador separado para FxCop. Oficialmente, actualmente solo se puede ejecutar el análisis de código (FxCop 12.0 / 14.0 / 15.0) después de instalar Visual Studio 2013/2015 / 2017. Sin embargo, estamos decididos a no instalar Visual Studio en los agentes de comstackción (la instalación necesita entonces mantenerse en sincronizar con lo que tenemos en las computadoras del desarrollador, etc.).

Entonces, ¿cómo haré para que FxCop 12.0 / 14.0 / 15.0 funcione en un agente de comstackción, preferiblemente sin instalar nada más? Sin embargo, aceptaría agregar algunos archivos binarios y msbuild al control de código fuente. De lo contrario: ¿hay alguna manera de instalar solo las cosas de FxCop usando el instalador de Visual Studio 2013/2015/2017?

Nota: estamos utilizando Teamcity como servidor de comstackción.

Respuestas

Como hay varias respuestas válidas para entornos específicos y versiones de FxCop, me he tomado la libertad de vincularlas aquí para un acceso más fácil:

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

Para FxCop 14.0 / VS2015, vea esta respuesta


Ejecute FxCop 12.0 sin instalar Visual Studio 2013

De acuerdo, he invertido 6 horas y ahora está funcionando. Agregué todos los ejecutables, dlls y objectives de msbuild necesarios al control de fuente.

Estos son los archivos que tuve que agregar al control de origen: (Tenga en cuenta que esto podría violar algunos acuerdos de licencia)

(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 

Cópialos de la siguiente manera:

  • todo el contenido de la carpeta de instalación de FxCop desde

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

  • desde Visual Studio 2013 C ++ redist, o en cualquier otro lugar: (también vea la información legal ) copie msdia120 x86 y x64 a:

    msdia120.dll (874 KiB)

    amd64 \ msdia120.dll (1.07 MiB)

  • del caché de ensamblados global ( C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\ ) de un equipo donde está instalado VS2013, copie los siguientes archivos DLL a: (¡Asegúrese de que los archivos DLL sean de la versión 12.0!)

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • Todos los archivos de %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis a

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

(Además necesita el SDK de Windows (7.1 / 8.1) apropiado para comstackr la aplicación .net 4.0 / 4.5 instalada en el agente de comstackción)

Además, tuvimos que ajustar el archivo msbuild del proyecto de la siguiente manera:

    

Y esto es lo que nuestro Custom.CodeAnalysis.targets contiene:

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

!! ¡Para FxCop 12.0 / VS2013 vea esta respuesta !

Ejecute FxCop 14.0 sin instalar Visual Studio 2015

Prerrequisitos:

  • MSBuild 14.0 -> Instalar Microsoft Build Tools 2015
  • Visual C ++ Redistributable para Visual Studio 2015 x86 (siempre se requiere la versión x86, dependiendo de la comstackción, también se puede requerir la redistribución x64. Si falta, el mensaje de error puede ser críptico, por ejemplo 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. ). En lugar de instalar el redist completo, también puede copiar los archivos DLL necesarios por separado, pero en este momento no sé cuáles son necesarios. Es bastante difícil y lleva mucho tiempo descubrir cuáles faltan exactamente.

Dependiendo de lo que quieras construir:

  • SDK de Windows apropiado, por ejemplo SDK de Windows 10
  • .net SDK / targets apropiados (.NET Framework 4.6 SDK está incluido en Windows 10 SDK)

Archivos para agregar al control de fuente

Estos son los archivos que tuve que agregar al control de origen: (Tenga en cuenta que esto podría violar algunos acuerdos de licencia)

 (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 

Cópialos de la siguiente manera:

  • todo el contenido de la carpeta de instalación de FxCop desde

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

  • desde Visual Studio 2015 C ++ redist, o en cualquier otro lugar: (también vea información legal ) copie msdia140 x86 y x64 a:

    msdia140.dll (1057 KiB)

    amd64 \ msdia140.dll (1349 KiB)

  • del caché de ensamblados global ( C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\ ) de un equipo donde está instalado VS2015, copie los siguientes archivos DLL a: (¡Asegúrese de que los archivos DLL sean la versión 14.0!)

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • Todos los archivos de %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis a

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

Además ajusté el archivo del proyecto msbuild (* .csproj) de la siguiente manera (Sugerencia: me estoy desviando ligeramente de la forma en que lo hacía anteriormente con VS2013. No es porque FxCop 14 funcione de manera diferente, sino porque de esta manera puedo incluir fxcop por paquete nuget y usa la funcionalidad nuget estándar para la importación de archivos .targets a .csproj):

     

Y esto es lo que nuestro Custom.CodeAnalysis.targets contiene:

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

Usar FxCop para el análisis de SonarQube sin instalar Visual Studio

Si tiene habilitadas las reglas de FxCop en su perfil de calidad SonarQube, SonarQube requiere FxCop 14.0.

Estos pasos se basan principalmente en la respuesta destacada de @BatteryBackupUnit:

  1. Instale Microsoft Build Tools 2015 en la máquina de comstackción.

  2. Instale Microsoft Visual C ++ 2015 Redistributable Update 3 , ambos x86 y x64, en la máquina de comstackción.

  3. Importe el siguiente archivo de registro (actualice la letra de la unidad si no es C 🙂 en la máquina de comstackción:

 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. Copie todos los %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools (no solo el subdirectorio FxCop) en el mismo lugar en la máquina de comstackción.

  2. Copie %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis en el mismo lugar en la máquina de comstackción.

  3. Desde el caché de ensamblados global (C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL_NameOfTheAssembly_) de un equipo donde está instalado VS2015, copie Microsoft.VisualStudio.CodeAnalysis.dll y Microsoft.VisualStudio.CodeAnalysis.Sdk.dll (asegúrese de que los archivos DLL son la versión 14.0!). Copie a C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis en el equipo de comstackción o instálelo en el GAC del equipo de comstackción.

Si ve Phx.FatalError después de todo esto, hay un último ritual … Copie vs_profiler_x64_enu.exe desde Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setups e instálelo en la máquina de comstackción.

Desviaciones de las instrucciones de @ BatteryBackupUnit:

  1. Se necesita todo el directorio de Static Analysis Tools , no solo el subdirectorio FxCop.
  2. En lugar de anidar una subcarpeta Msbuild en FxCop, debe colocarla en la ubicación original.
  3. Copiar msdia120.dll y amd64\msdia140.dll en el directorio FxCop parece innecesario siempre que esté instalado Visual C ++ 2015 Redistributable.
  4. No hay modificaciones relacionadas con FxCop en el archivo de proyecto (* .csproj).
  5. No Custom.CodeAnalysis.targets archivo Custom.CodeAnalysis.targets .

Hay una manera muy simple para TFS :

En la máquina de comstackción, agregue una variable de entorno: FXCOPDIR , FXCOPDIR a: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop (simplemente copie esta carpeta de su máquina de desarrollo).

En este directorio hay un archivo llamado: FxCopCmd.exe y TFS Build lo recogerá automáticamente, incluso si vs no está instalado. Es posible que deba reiniciar el servidor una o dos veces, pero la comstackción eventualmente funcionará. También deberá asegurarse de que haya dos dlls instalados en el gac: Microsoft.VisualStudio.CodeAnalysis.dll y Microsoft.VisualStudio.CodeAnalysis.Sdk.dll. El primero se puede encontrar en la ruta mencionada anteriormente, pero el último, el La única forma de conseguirlo es que lo agarré del gac en mi máquina de desarrollo. (Puede deshabilitar la vista especial de la carpeta gac, modificando el registro, simplemente googleándolo).

Ejecute FxCop 15.0 sin instalar Visual Studio 2017

Prerrequisitos:

  • MSBuild 15.0 -> Instalar Microsoft Build Tools 2017 , es posible que también desee ver aquí
  • Visual C ++ redistribuible para Visual Studio 2017 x86 o aquí O Visual Studio 2017 con C ++. —- Nota : siempre se requiere la versión x86. Dependiendo de la comstackción, también puede ser necesaria la redirección x64. Si falta, el mensaje de error puede ser críptico, por ejemplo, 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. ) En lugar de instalar el redist completo, también puede copiar los archivos DLL necesarios por separado, pero en este momento no sé cuáles son necesarios. Es bastante difícil y lleva mucho tiempo descubrir cuáles faltan exactamente.

Dependiendo de lo que quieras construir:

  • SDK de Windows apropiado, por ejemplo SDK de Windows 10
  • .net SDK / targets apropiados (.NET Framework 4.6 SDK está incluido en Windows 10 SDK)

Archivos para agregar al control de fuente

Estos son los archivos que tuve que agregar al control de origen: (Tenga en cuenta que esto podría violar algunos acuerdos de licencia)

 (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 

Cópialos de la siguiente manera:

  • todo el contenido de la carpeta de instalación de FxCop desde

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

  • desde Visual Studio 2017 C ++ redist (o su instalación de Visual Studio 2017, si tiene instalada la carga de trabajo VC ++:% ProgramFiles (x86)% \ Microsoft Visual Studio \ 2017 \\ VC \ Redist \ MSVC \ 14.12.25810) o cualquier otra lugar: (también vea información legal ) copie msdia140 x86 y x64 (el mío tiene la versión 14.12.25810.0) para:

    msdia140.dll (1.12 MiB)

    amd64 \ msdia140.dll (1.42 MiB)

  • Todos los archivos de %programfiles(x86)%\\Microsoft Visual Studio\2017\ **INSERT EDITION HERE** \MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis a

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild \ Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

Además, ajusté el archivo msbuild del proyecto (* .csproj) de la siguiente manera:

     

Y esto es lo que nuestro Custom.CodeAnalysis.targets contiene:

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

Notas para las rutas de Visual Studio:

El camino a la instalación de Visual Studio depende de la edición. Incluye Profesional y Enterprise. La edición AFAIR Community tiene un camino diferente, pero tampoco admite FxCop. Correcciones bienvenidas 🙂