svn - Haciendo que TeamCity integre el número de compilación de Subversion en la versión de ensamblaje
msbuild continuous-integration (2)
El archivo CSPROJ es efectivamente un archivo MSBuild.
Descargue el proyecto de clase correspondiente en VS.NET, BeforeBuild
y BeforeBuild
el comentario del objetivo BeforeBuild
. Agregue la tarea FileUpdate
MSBuild de las extensiones de comunidad de MSBuild.
En su archivo MSBuild, puede recuperar el BUILD_NUMBER de TeamCity usando la variable de entorno $(build_vcs_number_1)
. Tenga en cuenta que es posible que desee crear una Configuración adicional para ''Producción'' que ''condiciona que verifique, ya que esto obviamente no funcionará cuando construya localmente.
Simplemente use eso como entrada para la propiedad ReplacementText
la tarea FileUpdate.
Tenga en cuenta que si sus números de revisiones superan la marca 65535 ( UInt16
), no puede usarlos en el atributo AssemblyVersion
.
Sin embargo, lo que te sugiero que utilices es AssemblyInformationalVersion
, que es solo una cadena que no tiene esa limitación. Por supuesto, a menos que esté seguro de que no alcanzará este límite superior de la revisión, pero eso parece una forma poco fiable de hacerlo.
Alternativamente, puede idear una forma (abcd siendo su número de versión) de usar la revisión div 1000 para c y la revisión mod 1000 para d.
Quiero ajustar la salida de mi configuración de compilación de TeamCity de mi biblioteca de clases para que los archivos dll producidos tengan el siguiente número de versión: 3.5.0.x, donde x es el número de revisión de subversión que TeamCity ha seleccionado.
Descubrí que puedo usar la variable de entorno BUILD_NUMBER
para obtener x, pero desafortunadamente no entiendo qué más necesito hacer.
Los "tutoriales" los encuentro todos dicen "Simplemente agregue esto al script", pero no dicen qué script, y "esto" generalmente se refiere a la tarea AssemblyInfo de las extensiones de la comunidad de MSBuild.
¿Necesito crear un script MSBuild personalizado de alguna manera para usar esto? ¿Es la "secuencia de comandos" lo mismo que el archivo de solución o el archivo de proyecto C #?
No sé mucho sobre el proceso de MSBuild, excepto que puedo pasar un archivo de solución directamente a MSBuild, pero lo que necesito agregar a "la secuencia de comandos" es XML, y el archivo de la solución definitivamente no se parece a XML.
Entonces, ¿alguien puede indicarme una guía paso a paso sobre cómo hacer que esto funcione?
Esto es lo que terminé con:
- Instalar las tareas de la comunidad de MSBuild
Edite el archivo .csproj de mi biblioteca de clases principal y cambie la parte inferior para que lea:
<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets" /> <Target Name="BeforeBuild"> <AssemblyInfo Condition=" ''$(BUILD_NUMBER)'' != '''' " CodeLanguage="CS" OutputFile="$(MSBuildProjectDirectory)/../GlobalInfo.cs" AssemblyVersion="3.5.0.0" AssemblyFileVersion="$(BUILD_NUMBER)" /> </Target> <Target Name="AfterBuild">
Cambie todos mis archivos AssemblyInfo.cs para que no especifiquen AssemblyVersion o AssemblyFileVersion (en retrospectiva, veré cómo volver a usar AssemblyVersion)
- Se agregó un enlace al GlobalInfo.cs ahora global que se encuentra justo fuera de todo el proyecto.
- Asegúrate de que este archivo se genere una vez, para que tenga un archivo predeterminado en el control de origen
Esto ahora actualizará GlobalInfo.cs solo si se establece la variable de entorno BUILD_NUMBER, que es cuando construyo a través de TeamCity.
Opté por mantener constante AssemblyVersion, de modo que las referencias sigan funcionando, y solo actualice AssemblyFileVersion, para poder ver de qué compilación es una DLL.
En TeamCity 6.5 esto es MUY FÁCIL de lograr utilizando el parche de AssemblyInfo .
- Vaya al paso de configuración de compilación 3 "Pasos de compilación";
- Haga clic en "Agregar característica de compilación";
- Elija el tipo de característica "AssemblyInfo parche";
- Indica lo que te gustaría como versión. Yo uso:
%system.build.number%