Esta respuesta es una modificación menor de la respuesta de Brent Arias. Su PostBuildMacro funcionó bastante bien para mí hasta una actualización de versión de Nuget.exe.
En las versiones recientes, Nuget recorta partes no significativas del número de versión del paquete para obtener una versión semántica como "1.2.3". Por ejemplo, la versión de ensamblado "1.2.3.0" está formateada por Nuget.exe "1.2.3". Y "1.2.3.1" tiene el formato "1.2.3.1" como se esperaba.
Como necesito para inferir el nombre de archivo paquete exacta generada por Nuget.exe, que uso ahora esta macro adaptated (probado en VS2015):
<Target Name="PostBuildMacros">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="Targets" />
</GetAssemblyIdentity>
<ItemGroup>
<VersionNumber Include="$([System.Text.RegularExpressions.Regex]::Replace("%(Targets.Version)", "^(.+?)(\.0+)$", "$1"))" />
</ItemGroup>
</Target>
<PropertyGroup>
<PostBuildEventDependsOn>
$(PostBuildEventDependsOn);
PostBuildMacros;
</PostBuildEventDependsOn>
<PostBuildEvent>echo HELLO, THE ASSEMBLY VERSION IS: @(VersionNumber)</PostBuildEvent>
</PropertyGroup>
ACTUALIZACIÓN 05/24/2017: corregí la regex de esta manera: "1.2.0.0" se traducirá a "1.2.0" y no a "1.2" como se ha codificado previamente.
Y para responder a un comentario de Ehryk Abr, se puede adaptar la expresión regular para mantener sólo una parte del número de versión. A modo de ejemplo para mantener "MAJOR.MINOR", reemplace:
<VersionNumber Include="$([System.Text.RegularExpressions.Regex]::Replace("%(Targets.Version)", "^(.+?)(\.0+)$", "$1"))" />
Por
<VersionNumber Include="$([System.Text.RegularExpressions.Regex]::Replace("%(Targets.Version)", "^([^\.]+)\.([^\.]+)(.*)$", "$1.$2"))" />
leer todas las respuestas para el que sea más adecuado para usted. El 'PostBuildEventDependsOn' es el más votado y el más simple. (cuidado con el truco especial de '25' Unicode al pegar ' – OzBob