2011-12-09 13 views
10

Me gustaría ser capaz de especificar el número de versión para todos los conjuntos que se generen durante la construcción como un argumento de comandos de MSBuild como esto:Especificar número de versión de montaje como un argumento de línea de comandos en MSBuild

MSBuild.exe /p:version=5.4.3.0 

I he examinado AssemblyInfoTask pero no me parece una buena solución en este caso.

+0

¿Por qué la tarea AssemblyInfo no es adecuada para usted? Su propósito * es * establecer la información de ensamblaje, incluido el atributo de número de versión (AssemblyVersion). – DaveE

+0

El número de versión debe configurarse en función de algunas reglas externas, no de algunas reglas que pueden incorporarse utilizando AssemblyInfoTask. Básicamente, quiero que el argumento de línea de comando se convierta en el número de versión. – user379429

Respuesta

10

Utilizo la tarea AssemblyInfo como usted describe en su comentario todo el tiempo.

<!-- update standard assembly attribute in all projects --> 
    <Target Name="BeforeBuild" > 
    <Message Text="Updating AssemblyInfo to Version $(VersionNumber)"></Message> 
    <Message Text="Writing to AssemblyInfo files in $(SolutionRoot)"></Message> 
    <AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" 
        AssemblyCopyright="$(AssemblyCopyright)" 
        AssemblyVersion="$(VersionNumber)" 
        AssemblyFileVersion="$(VersionNumber)" 
        > 
    </AssemblyInfo> 
    </Target> 

El valor VersionNumber se pasa desde fuera del archivo de proyecto de MSBuild exactamente como lo describen:

MSBuild <project_file> /p:VersionNumber=<value>;... 

Utilizamos el objetivo BeforeBuild para asegurar los archivos de todos los AssemblyInfo.cs ponerse nervioso antes de los inicios de construcción . ¿No es esto lo que quieres?

+1

Cuando intento esto, aparece un error que dice que la tarea AssemblyInfo no se encuentra. Busqué en Google la "tarea de AssemblyInfo" e instalé algo con ese nombre como una extensión MSBuild, pero eso no funcionó. ¿Podría proporcionar un enlace al que está usando? – CoderDennis

+0

@DennisPalmer, usamos la tarea del [paquete de extensión MSBuild] (http://msbuildextensionpack.codeplex.com/). Incluya el ... archivo de tareas en un elemento PropertyGroup y debería estar listo para continuar. – DaveE

+0

instalar ese paquete de extensión no ayudó, todavía tengo el error así que abrí ASÍ pregunta aquí http://stackoverflow.com/questions/13090933/assemblyinfo-not-found-and-msbuild-extension-pack-installed –

7

Sé que esta es una vieja pregunta, pero Google me lleva hasta aquí como el resultado principal.

Seguí una solución simple en this. Sin necesidad de paquete de extensión.

Básicamente lo que hay que hacer es añadir a los archivos "BuildCommon.targets" y modifique el archivo csproj consecuencia de tener el número de versión especificado en msbuild como:

msbuild.exe abc.sln /p:Configuration=Release;VersionAssembly=1.2.3.4 

Espero que esto ayude.

+0

¿Debería ser AssemblyVersion? –

+0

@Freidgeim: eso depende de cómo nombre ese conmutador de comando en el archivo BuildCommon.targets. eso es totalmente tuyo :) – Jach

Cuestiones relacionadas