5

代码:

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
)

我刚刚开始使用 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
)

更新:

好的,我已经设法使用正确的自动递增版本号构建 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
)

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

4

3 回答 3

7

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

就我而言,我还在构建后事件中添加了“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>  
于 2013-10-05T00:40:31.263 回答
6

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

[assembly: AssemblyVersion("1.0.0")]

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

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

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

[assembly: AssemblyInformationalVersion("1.0.0")]

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

Install-Package NuSpec 

NuGet 将在定位 MyProject.csproj 时查找此 nuspec(确保它称为 MyProject.nuspec)。

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

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

假设您只是在构建之前更改程序集版本,那么调用 nuget pack 的后期构建应该足够好。

nuget pack MyProject.csproj
于 2012-07-30T16:28:33.533 回答
4

这就是如何在构建后事件中获取 $(version) 变量的方法,它应该与构建后一样好。

<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>

所以你必须修改你的 .csproj 文件,因为 VS 没有为此提供 UI。

于 2013-02-22T15:13:04.640 回答