2010-08-25 11 views
35

Estamos migrando a .NET 4 y estamos muy interesados ​​en implementar nuevas capacidades de diseño por contrato.Microsoft Code Contracts y CI build server

Como sabemos Code Contract motor requiere la instalación de Code Contract addin alt text
y VS Ultimate o superior (para la comprobación estática).

aquí está mi pregunta:

  1. ¿Puedo usar un contrato de reescritura del código sin necesidad de instalar VS el CI de creación de servidores (TeamCity)?
  2. ¿Hay alguna tarea de msbuild para ejecutar la verificación de contrato?
  3. ¿Utiliza la validación de Code Contract con las compilaciones de CI?
+3

Me encantaría obtener el análisis estático del contrato de código para al menos las compilaciones nocturnas, así que estaré interesado en escuchar lo que la gente tiene para decir. También sería genial si hubiera un servicio de análisis estático del lado del servidor para que pueda configurar un servidor muy rápido y permitir que aloje el análisis estático, en lugar de tenerlo lentamente en la máquina de desarrollo. Tal vez incluso un servicio de nube de análisis estático? –

+0

@Dan Jugué un poco con el análisis estático de Code Contract y es genial. Ahora intento configurar la creación de TeamCity ... Aquí está la información de integración de msbuild (página 41) http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf –

+0

Me gusta la idea de una nube de análisis estático Servicio. Hrrmmmm ... tal vez debería intentar construir esto. –

Respuesta

46

¿Puedo usar un contrato de reescritura del código sin necesidad de instalar VS en CI acumulación servidor (TeamCity)?

Sí. Instale CodeContracts en el servidor de compilación. (Si se niega a instalar en una máquina sin Visual Studio, simplemente copie los archivos enumerados a continuación y sus dependencias en el servidor de compilación). Una vez instalado, encontrará las herramientas CodeContract instaladas en% programfiles% \ Microsoft \ Contracts \ Compartimiento. En ese directorio, hay 4 ejecutables que le interesarán:

  1. ccrewrite.exe - The binary rewriter. Esto debe ser ejecutado después de la compilación. Convierte sus contratos en controles de tiempo de ejecución o lo que especifique en el que desea que se conviertan.

  2. ccrefgen.exe - Esto puede generar conjuntos de referencia de contrato junto con sus ensamblajes. Esto es útil si está enviando dlls para ser consumido por otras partes.

  3. cccheck.exe - El comprobador estático. En el servidor de compilación, debe ejecutar esta herramienta sobre sus ensamblajes que contienen contratos, y escupirá advertencias y mensajes a medida que encuentre problemas potenciales.

  4. ccdocgen.exe - Esto genera documentación XML de los contratos en su código. Es posible que desee utilizar esto si está enviando dlls con contratos para el consumo de otras partes, o si solo necesita documentos internos en su código.

¿Hay alguna tarea msbuild para ejecutar la comprobación de contrato?

Sí. Hay 2 tareas de MSBuild enviadas con CodeContracts: en el mismo directorio de instalación de CodeContracts, consulte la carpeta MSBuild \ [framework version]. En ese directorio, hay 2 archivos que deberían ayudarlo: Microsoft.CodeContracts.targets y Microsoft.CodeContractAnalysis.targets.

De acuerdo con la documentación CodeContracts,

Una extensión de la escritura msbuild Microsoft .Contract.objetivos contiene las acciones de compilación adicionales para el contrato de tiempo de ejecución instrumentación y verificación estática pasos. Como resultado de este enfoque, es posible usar la misma funcionalidad al construir desde la línea de comando con el comando msbuild. El uso de msbuild en un proyecto o solución que usa contratos habilitados a través de la interfaz de usuario VS realizará las mismas acciones que la compilación correspondiente en VS.

Como puede ver, es posible y compatible integrar las herramientas en compilaciones de CI a través de los objetivos de MSBuild.

¿Utiliza la validación de Code Contract con las compilaciones de CI?

Suponiendo que se refiera a la comprobación estática con advertencias/mensajes, lo he hecho personalmente, pero no lo he hecho en un proyecto grande.

Espero que esto ayude!

Punta de sombrero para C# In Depth de Jon Skeet libro para la explicación de las herramientas de línea de comandos.

+0

Muchas gracias. Ahora estamos intentando configurar esto en TeamCity. –

+1

Cool. ¡Por favor déjame saber el resultado! –

+1

Nota: los contratos de código ya no están cubiertos en C# In Depth book (a partir de la tercera edición) –

Cuestiones relacionadas