在Nuget的post-build中获取版本

use*_*406 5 c# 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
)
Run Code Online (Sandbox Code Playgroud)

我刚开始玩NuGet,想知道如何在我的NuGet包中包含版本号.我目前正在将其编码到后期构建事件中,这显然不是我想要继续做的事情.有人可以帮忙吗?

这是我目前的后期制作活动:

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
)
Run Code Online (Sandbox Code Playgroud)

更新:

好的,我已设法使用正确的自动递增版本号构建DLL:

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
)
Run Code Online (Sandbox Code Playgroud)

但是这个版本没有显示在我的MyGet包列表中.如何让它显示在那里以便可以下载?或者只能通过点击"添加包"手动完成?

Feu*_*Feu 7

只是扩展了CarlosJLópez提供的解决方案,我使用AfterBuild脚本实际调用NuGet并提供版本参数.

在我的例子中,我还在post build事件中添加了"cd $(ProjectDir)",它实际上发生在AfterBuild脚本之前.

干杯,

    <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>  
Run Code Online (Sandbox Code Playgroud)


Xav*_*ter 6

在您的问题中不清楚,但假设您想要将程序包的版本与程序集的版本同步,您可以简单地管理项目的AssemblyInfo.cs文件中的AssemblyVersion属性.

[assembly: AssemblyVersion("1.0.0")]
Run Code Online (Sandbox Code Playgroud)

或者如果您想使用自动生成的内部版本号

[assembly: AssemblyVersion("1.0.0.*")]
Run Code Online (Sandbox Code Playgroud)

如果要偏离程序集的版本,并且仅指定程序包版本,则可以使用AssemblyInfo.cs文件中的AssemblyInformationalVersion属性.

[assembly: AssemblyInformationalVersion("1.0.0")]
Run Code Online (Sandbox Code Playgroud)

从您使用的版本控制策略的问题也不清楚,但我假设您想要应用语义版本控制(前3个版本号最相关).通常在自动创建NuGet包时,我建议您在csproj目录中创建一个标记化的nuspec文件,这样您就可以更轻松地操作包元数据.仅供参考,甚至还有一个NuGet套餐可以帮助您:

Install-Package NuSpec 
Run Code Online (Sandbox Code Playgroud)

在针对MyProject.csproj时,NuGet将寻找这个nuspec(确保它被称为MyProject.nuspec).

<package>
  <version>$version$</version>
  ...
</package>
Run Code Online (Sandbox Code Playgroud)

我还在MyGet博客上解释了这篇文章:http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

一个称为nuget pack的post构建应该足够好,假设您只是在构建之前更改了程序集版本.

nuget pack MyProject.csproj
Run Code Online (Sandbox Code Playgroud)