2011-10-18 20 views
10

Estoy intentando que msbuild muestre información de análisis de código como lo hace en VS. Tengo una configuración para mi proyecto llamada "CodeAnalysis" en VS que está configurada para ejecutar análisis de código en compilación (con el conjunto mínimo de reglas). De todos modos, esto funciona bien en VS, pero cuando ejecuto msbuild desde la línea de comandos solo muestra las advertencias básicas de compilación y no ejecuta ningún análisis de código. Alguien sabe por qué está pasando esto?RunCodeAnalysis = true no funciona en el símbolo del sistema (MSBuild)

de configuración en el archivo de proyecto:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU'"> 
<OutputPath>bin\</OutputPath> 
<CodeAnalysisRuleSet>C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
<RunCodeAnalysis>true</RunCodeAnalysis> 

Línea de comandos:

msbuild Solution.sln /p:Configuration=CodeAnalysis /t:Rebuild 

También probé:

msbuild Solution.sln /p:RunCodeAnalysis=true /t:Rebuild 
+2

ejecute el registro de nivel de diagnóstico (/ fl/flp:v=diag;logfile=diag.log) y busque por qué se omite el objetivo RunCodeAnalysis. Se debe ejecutar como una dependencia de PrepareForRun que se ejecuta como una dependencia de CoreBuild. –

+0

Comprueba si las propiedades $ (CodeAnalysisPath), $ (CodeAnalysisTargets) ya están configuradas y haciendo referencia a la ruta válida de herramientas de análisis de código, básicamente solo imprímelas dentro de un script – sll

+0

@BrianKretzler Gracias por la sugerencia. ¿Hay algo en particular que debería estar buscando? Encontré lo siguiente: CoreBuildDependsOn = PrepareForRun; PrepareForRunDependsOn = RunCodeAnalysis; También noté que en la acción de corebuild dice: Tarea "CallTarget" omitida, debido a una condición falsa; ('$ (UnloadProjectsOnCompletion)' == 'true') se evaluó como ('falso' == 'verdadero') ..... ¿podría estar relacionado? –

Respuesta

1

Es necesario tener instalado en el Visual Studio máquina. Hay muchas secuencias de comandos que se incluyen a través de la línea csproj:

Como tiene VS (de edición adecuada) instalado, incluirá el archivo de objetivos FxCop y comenzará el Análisis de código por usted.

+0

Como lo entiendo análisis FxCop y Visual Studio Code Analysis no son lo mismo. – Zitrax

+0

Son lo mismo. Code Analysis tiene ahora más reglas y con 2015 también es compatible con Roslyn Analyzers. fxCop nunca los apoyará. – jessehouwing

9

Por defecto, MSBuild utiliza el valor configurado en el archivo de proyecto, pero puede anularlo en la línea de comandos con el argumento msbuild

/p:RunCodeAnalysis=true 

para ejecutarse siempre de análisis de código. Viceversa, use

/p:RunCodeAnalysis=false 

para deshabilitar el análisis del código.

Consulte también:

+0

Siempre y nunca son los valores presentados por la configuración de compilación de XAML, pero bajo el capó se convierten a 'true' y' false' cuando se pasan a MsBuild. – jessehouwing

0

Una vez que me enfrenté al mismo problema, empecé por conseguir un registro (excesivamente) verbosa e hilo en un archivo que pudiera inspeccionar:

msbuild.exe ProjectFile.csproj /v:diag > bld.log 

En ese archivo, noté que el objetivo de Análisis de código se omitió porque RunCodeAnalysisOnThisProject se evaluó como verdadero. Entonces en el csproj, incluí la siguiente línea debajo del primer grupo de propiedades:

<RunCodeAnalysisOnThisProject>true</RunCodeAnalysisOnThisProject> 

que lo hizo por mí.

Cuestiones relacionadas