C# 获取Nuget的后期生成中的版本

C# 获取Nuget的后期生成中的版本,c#,nuget,C#,Nuget,代码: 我刚刚开始使用NuGet,想知道如何在我的NuGet包中包含版本号。我目前正在将其硬编码到构建后事件中,这显然不是我想要继续做的事情。有人能帮忙吗 这是我当前的生成后事件: if $(ConfigurationName) == Release ( cd $(ProjectDir) nuget spec Entities -f nuget pack DeusPak.Entities.csproj -Prop Configuration=Release nug

代码:

我刚刚开始使用NuGet,想知道如何在我的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
)
更新:

好的,我已经用正确的自动递增版本号构建了DLL:

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
)

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

您的问题不清楚,但假设您希望将包的版本与程序集的版本同步,您只需管理项目的AssemblyInfo.cs文件中的AssemblyVersion属性即可

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
)
[assembly: AssemblyVersion("1.0.0.*")]
或者如果您想使用自动生成的内部版本号

[assembly: AssemblyVersion("1.0.0")]
如果要偏离程序集的版本,并且只指定程序包版本,则可以使用AssemblyInfo.cs文件中的属性

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
)
[assembly: AssemblyVersion("1.0.0.*")]
这个问题也不清楚您使用了什么版本控制策略,但我假设您想要应用(前3个版本号最相关的地方)。通常,在自动创建NuGet包时,我建议您在csproj目录中创建一个,这样您就可以更轻松地操作包元数据。仅供参考,甚至还有一个NuGet软件包可以帮助您:

[assembly: AssemblyInformationalVersion("1.0.0")]
NuGet将在瞄准MyProject.csproj时查找此nuspec(确保其名为MyProject.nuspec)

Install-Package NuSpec 

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

nuget pack MyProject.csproj


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

只是稍微扩展了Carlos J López提供的解决方案,我使用了后构建脚本来实际调用NuGet并提供版本参数

在我的例子中,我还向后期构建事件添加了“cd$(ProjectDir)”,这实际上发生在后期构建脚本之前

干杯

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


Hi,我不想每次都在后期构建中手动更改程序集版本,但我希望能够传递自动获取版本号的令牌。这是我想更改的行,但我不确定语法:nuget push Dev.1.0.0.nupkg$(MYGET_API_KEY)-Source即使我添加了3位数字的版本(如您的示例“1.0.0”),nuget也会生成一个以
1.0.0.nupkg
结尾的文件。也许我遗漏了什么?我的assemblyinfo文件只有
AssemblyVersion
AssemblyFileVerion
属性,它们都有相同的值“1.0.0”。命令看起来正常。在推送pkg和在MyGet提要上提供pkg之间可能会有一点延迟。不过,这不会超过几分钟。还要记住,如果推送预发布包(例如1.0.0-alpha),则必须在NuGet package Manager控制台中使用-IncludePrerelease开关,或者在通过VSIX UI对话框浏览提要时在下拉列表中选择IncludePrerelease选项。你确定pkg推送成功吗(没有日志)?你是说你正在做这个后构建目标和后构建事件吗?这样做的目的是什么?你不能在后构建中执行另一个命令吗?