Montaje de versiones con CruiseControl.net
versioning assemblyinfo (3)
Yo uso powershell para esto. lpath es la ruta al código fuente, y buildnum es mi buildnumber que añado. Eso es todo lo que realmente hago con esto. Sin embargo, debería darle suficiente para cambiar o establecer uno o todos los otros campos disponibles. Paso en lpath y obtengo el buildnumber de las variables de entorno disponibles en CC.NET y puedo usar este script una y otra vez, simplemente cambiando lo que paso en la línea de comando en el archivo de configuración. También tengo uno que modifica los archivos de recursos para el Código C ++ si eso es realmente lo que necesita modificar.
$files = Get-ChildItem $lpath -recurse -filter *AssemblyInfo.cs -name
Foreach ($file in $files)
{
$file = $lpath + "/" + $file
$fileObject=get-item $file
$fileObject.Set_IsReadOnly($False)
$sr = new-object System.IO.StreamReader( $file, [System.Text.Encoding]::GetEncoding("utf-8") )
$content = $sr.ReadToEnd()
$sr.Close()
$content = [Regex]::Replace( $content, ''(?<=/[assembly: AssemblyVersion/("[0-9].[0-9].[0-9].)[0-9]?[0-9]?[0-9]'', $buildnum);
$content = [Regex]::Replace( $content, ''(?<=/[assembly: AssemblyFileVersion/("[0-9].[0-9].[0-9].)[0-9]?[0-9]?[0-9]'', $buildnum);
$sw = new-object System.IO.StreamWriter( $file, $false, [System.Text.Encoding]::GetEncoding("utf-8") )
$sw.Write( $content )
$sw.Close()
$fileObject.Set_IsReadOnly($True)
}
Configuré CruiseControl.net para muchos de mis proyectos relacionados. Como resultado, una etiqueta de proyecto único en CruiseControl tiene múltiples comprobaciones de SVN y luego un montón de tareas de msbuild compilan todos los archivos sln individuales.
Necesito actualizar la versión de ensamblaje de todas las soluciones cuando se realice esta compilación. Sin embargo, dado que no estoy usando nant y no estoy usando archivos MSBuild proj, no estoy seguro de cómo obtener esto.
Me pregunto si me estoy perdiendo algo obvio. Solo necesito una solución que se pueda implementar haciendo los cambios apropiados en el archivo ccnet.config sin requerir que haga cambios a los archivos csproj.
Gracias, Anj
Hay una tarea para hacer exactamente lo que estás preguntando.
Tendrá que instalar las tareas de MSBuildCommunity, que se encuentran aquí .
Entonces, puedes crear algo como esto:
<PropertyGroup>
<MyAssemblyVersion>$(CCNetLabel)</MyAssemblyVersion>
</PropertyGroup>
<Target Name="GenAssemblyInfo">
<AssemblyInfo
ContinueOnError="false"
CodeLanguage="CS"
OutputFile="$(MSBuildProjectDirectory)/YourAssembly/AssemblyInfo.cs"
AssemblyTitle="blah"
AssemblyDescription="blah blah"
AssemblyCompany="Anj Software, Inc."
AssemblyProduct="Anj''s Awesome App"
AssemblyCopyright="blah blah"
CLSCompliant="false"
AssemblyVersion="$(MyAssemblyVersion)"
AssemblyFileVersion="$(MyAssemblyVersion)"
/>
</Target>
Tenga en cuenta que puede establecer un prefijo de número de compilación en su archivo ccnet.config para que sus ensamblajes sean numerados 2.1.0.x donde x es el número de compilación. Así es como hacemos nuestra numeración de versiones donde trabajo.
Aún deberá mantener un archivo AssemblyInfo.cs predeterminado como parte de cada uno de los proyectos que componen su solución.
¿Qué hay de usar un AssemblyInfo compartido en tus proyectos?
Esto es lo que hacemos para nuestros productos:
Cada proyecto tiene su propio AssemblyInfo.cs: contiene AssemblyTitle, AssemblyDescription, Guid y otros atributos que son exclusivos de ese ensamblaje.
Cada proyecto también tiene otros dos archivos de información de ensamblaje, tenga en cuenta que estos se agregan como un enlace en lugar de un archivo directo (VS -> Agregar -> Archivo existente -> Agregar como enlace (pequeña flecha hacia abajo al lado para agregar))
Los dos archivos de enlace:
CompanyAssemblyInfo.cs - AssemblyCompany, AssemblyCopyright, AssemblyConfiguration, CLSCompliant, SecurityPermission, etc. Básicamente, todo lo que queremos es estándar en todos nuestros ensamblajes.
ProductAssemblyInfo.cs - AssemblyProduct, AssemblyVersion, AssemblyFileVersion. Esto nos permite enviar la misma versión a todos los ensamblajes desde un archivo.
Nuestro proceso de CI y lanzamiento es más complicado, pero eso está en el corazón de todo: un único punto (archivo) que controla la versión del producto (ensamblajes, instaladores, ¡todo!)