2012-07-30 25 views
5

Código:conseguir la versión en posterior a la generación de Nuget

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Entities -f 
    nuget pack DeusPak.Entities.csproj -Prop Configuration=Release 
    nuget push DeusPak.Entities.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/lojaali/api/v2/package 
) 

acabo de empezar a jugar con NuGet y quieren saber cómo incluir el número de versión en el paquete NuGet. En este momento estoy difícil de codificar en el evento posterior a la construcción, que obviamente no es lo que quiero seguir haciendo. ¿Alguien puede ayudar?

Ésta es mi actual evento posterior a la generación:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev-f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.1.0.0.0.nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

Actualización:

bien, he logrado construir la DLL con la corrección automática número de versión incrementado:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev -f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

Pero esta versión no aparece en mi lista de paquetes MyGet. ¿Cómo puedo mostrarlo para que se pueda descargar? ¿O solo se puede hacer manualmente haciendo clic en "Agregar un paquete"?

+0

Los comandos se ven bien. Puede haber un pequeño retraso entre empujar el paquete y tenerlo disponible en el feed MyGet. Sin embargo, esto no debería tomar más de unos pocos minutos. También tenga en cuenta que, si presiona un paquete de presentación preliminar (por ejemplo, 1.0.0-alfa), debe usar el modificador -IncluirPreparación en la Consola de administrador de paquetes NuGet, o seleccionar la opción IncluirPreparación en el menú desplegable al explorar su feed a través del Cuadro de diálogo UI de VSIX. ¿Estás seguro de que el paquete empuja con éxito (sin registros)? –

Respuesta

6

No está claro en su pregunta, pero suponiendo que desea sincronizar la versión de su paquete con la versión de su conjunto, simplemente puede administrar el atributo AssemblyVersion en el archivo AssemblyInfo.cs del proyecto.

[assembly: AssemblyVersion("1.0.0")] 

o si desea utilizar genera automáticamente los números de compilación

[assembly: AssemblyVersion("1.0.0.*")] 

Si desea desviarse de la versión de la asamblea, y sólo especificar la versión del paquete, puede utilizar el atributo AssemblyInformationalVersion en el Archivo AssemblyInfo.cs.

[assembly: AssemblyInformationalVersion("1.0.0")] 

Tampoco está claro a partir de la pregunta ¿qué estrategia de control de versiones que utilice, pero voy a asumir desea aplicar Semantic Versioning (donde los 3 primeros números de versión son los más relevantes). En general, al crear automáticamente paquetes NuGet, le recomendaría que cree un tokenized nuspec file en su directorio csproj, para que pueda manipular más fácilmente los metadatos del paquete. Para su información, hay incluso un paquete NuGet para ayudarle con lo siguiente:

Install-Package NuSpec 

NuGet buscará este nuspec (asegúrese de que se llama MyProject.nuspec) cuando la orientación MyProject.csproj.

<package> 
    <version>$version$</version> 
    ... 
</package> 

También he explicado en el blog MyGet en este post: http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

Un poste de construcción que llama Nuget paquete debe ser bueno suficiente, entonces, asumiendo basta con cambiar la versión de montaje antes de construir.

nuget pack MyProject.csproj 
+0

Hola, no quiero cambiar manualmente la versión de ensamblaje en mi compilación de publicaciones siempre, pero quiero poder pasar el token que selecciona automáticamente el número de versión. Así que esta es la línea que quiero cambiar, pero no estoy seguro de la sintaxis: nuget push Dev.1.0.0.0.nupkg $ (MYGET_API_KEY) - Fuente http://www.myget.org/F/api/v2/ paquete – user517406

+0

Incluso si agrego la versión con 3 dígitos (como su ejemplo, "1.0.0"), nuget genera un archivo que termina en '1.0.0.0.nupkg'. ¿Me estoy perdiendo algo? Mi archivo assemblyinfo solo tiene los atributos 'AssemblyVersion' y' AssemblyFileVerion', y ambos tienen el mismo valor en ellos, "1.0.0". – julealgon

4

Esto es cómo puede obtener una variable $ (versión) en su caso tras la compilación, que debe ser tan buena como la posterior construcción.

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <Exec Command="echo %(AssemblyVersion.Version)" /> 
    <Message Text="Released %(AssemblyVersion.Version)" Importance="high" /> 
</Target> 

Así que tendría que modificar su archivo .csproj ya que VS no proporciona una interfaz de usuario para eso.

5

Simplemente extendiendo un poco la solución proporcionada por Carlos J López, utilicé el script AfterBuild para llamar realmente a NuGet y proporcionar el parámetro de versión.

En mi caso, también agregué "cd $ (ProjectDir)" al evento de compilación posterior, que realmente ocurre antes del script AfterBuild.

Saludos,

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
     <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
     </GetAssemblyIdentity> 
     <Exec Command="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" /> 
     <Message Text="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" Importance="high" /> 
    </Target> 
Cuestiones relacionadas