El enlace de precomisión modifica AssemblyInfo

Tengo un gancho precompromiso que define el número de compilation usando ruby ​​gem semver2 . La gem básicamente solo crea un file llamado .semver que almacena la información de la versión para el package.

El gancho genera un número de compilation basado en algunos parameters de date / confirmación y luego modifica AssemblyInfo.cs con esta información, luego agrega el file alterado antes de la confirmación.

Tengo algunas preguntas aquí:

  1. ¿Hay algún peligro al hacer que un gancho modifique mi file AssemblyInfo en lo que se refiere a .NET?

  2. ¿Debería hacerse esto con el gancho precompromiso o con un gancho diferente?

  3. ¿Cómo puedo decirle a este gancho que se comporte de manera diferente en --amend , merge , y rebase commits?

  4. ¿Cómo puedo decirle a este gancho que se comporte de manera diferente en cada twig?

  5. ¿Tiene una solución diferente para automatizar el número de compilation?

El gancho:

 #!/bin/sh # # Append build number to semver version # # check semver has been initiated if [ -f .semver ]; then echo `semver` else echo `semver init` echo `semver inc minor` echo `semver pre 'alpha.1'` echo `semver` fi # grab date string date_str=`date +%y%m.%d.` # grab commit count +1 build_num=$(git rev-list --since="00:00:00" HEAD --count) let "build_num += 1" # generate build & apply to semver build=$date_str$build_num semver meta $build # define version strings semver_str=$(semver) ver_full=${semver_str#"v"} cut_meta=$(cut -d "+" -f 1 <<<"$ver_full") ver_small=$(cut -d "-" -f 1 <<<"$cut_meta") # find AssemblyInfo & line number for AssemblyVersion line=$(grep -n "AssemblyVersion(" "Properties/AssemblyInfo.cs") line_num=$(cut -d ":" -f 1 <<<"$line") # edit AssemblyVersion new_line='[assembly: AssemblyVersion("'$ver_small'")]' sed -i "${line_num}s/.*/$new_line/" "Properties/AssemblyInfo.cs" # find line number for Semver line=$(grep -n "Semver(" "Properties/AssemblyInfo.cs") line_num=$(cut -d ":" -f 1 <<<"$line") # edit Semver new_line='[assembly: Semver("'$ver_full'")]' sed -i "${line_num}s/.*/$new_line/" "Properties/AssemblyInfo.cs" # add files git add .semver git add "Properties/AssemblyInfo.cs" 

AssemblyInfo.cs

 using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Authenticator.Properties; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("b6f9caad-fbfc-455a-8d69-f795fb9812ad")] // This assembly uses the Semantic Versioning v2.0.0 // For more information on Semantic Versioning please see http://semver.org/ [assembly: AssemblyVersion("0.1.0")] [assembly: Semver("0.1.0-alpha.1.0.0+1406.04.15")] 

Mi toma.

  1. No, es una práctica común editar el file AssemblyInfo durante la compilation justo antes de la compilation
  2. La técnica de una ruta de compromiso es interesante, pero tiene algunas desventajas: no todas las implementaciones de Git garantizan que los enganches funcionen (piense en Visual Studio Online) y que sus scripts funcionen.
  3. Ver # 5.
  4. Ver # 5.
  5. Si hace el trabajo de editar los files AssemblyInfo durante la compilation, funcionará independientemente. Su script necesita preguntar a Git por el estado actual (qué bifurcación y confirmación) para elegir los valores de SemVer correctos.

Publiqué un ejemplo en el blog que muestra cómo enlazar con MSBuild y cambiar los files de AssemblyInfo y de eso puedes encontrar muchos otros ejemplos, herramientas y references.