Visual studio NuGet:仅当$(ConfigurationName)=调试时,如何将自动递增的内部版本号附加到NuGet包版本?
我正在尝试使用VisualStudio后期生成事件来完成此任务 我希望发生什么:Visual studio NuGet:仅当$(ConfigurationName)=调试时,如何将自动递增的内部版本号附加到NuGet包版本?,visual-studio,package,nuget,nuget-package,post-build-event,Visual Studio,Package,Nuget,Nuget Package,Post Build Event,我正在尝试使用VisualStudio后期生成事件来完成此任务 我希望发生什么: if "$(ConfigurationName)" == "Debug" ( nuget pack "$(ProjectDir)$(ProjectName).nuspec" -Suffix ci nuget push -Source http://myfeed.com/nuget/NuGet-Development "*.nupkg" ) if "$(ConfigurationName)" == "Release
if "$(ConfigurationName)" == "Debug" (
nuget pack "$(ProjectDir)$(ProjectName).nuspec" -Suffix ci
nuget push -Source http://myfeed.com/nuget/NuGet-Development "*.nupkg" )
if "$(ConfigurationName)" == "Release" (
nuget pack "$(ProjectDir)$(ProjectName).nuspec"
nuget push -Source http://myfeed.com/nuget/NuGet-Production "*.nupkg" )
当我在debug中构建时,我想创建一个.nupkg
像MyProject.1.0.0.xxxx ci.nupkg
,其中xxxx
是一些自动递增的构建编号,1.0.0
在我的.nuspec
文件中定义
然而,当我构建发行版时,我只需要使用我的nuspec创建一个简单的MyProject.1.0.0.nupkg
我有一个开发NuGet提要和一个生产NuGet提要,我想在构建之后将它们推送到其中,这就是为什么我只想在调试中显示这个额外的构建编号 我几乎已经用
AssemblyInfo.cs
中的[assembly:AssemblyVersion(“1.0.0.*)]]
解决了这个问题,但是我的发布版本也添加了这个版本号,我不希望这样
以下是我现在在后期构建中使用的代码,仅使用nuspec而不是AssemblyInfo.cs:
if "$(ConfigurationName)" == "Debug" (
nuget pack "$(ProjectDir)$(ProjectName).nuspec" -Suffix ci
nuget push -Source http://myfeed.com/nuget/NuGet-Development "*.nupkg" )
if "$(ConfigurationName)" == "Release" (
nuget pack "$(ProjectDir)$(ProjectName).nuspec"
nuget push -Source http://myfeed.com/nuget/NuGet-Production "*.nupkg" )
有什么方法可以使用-Version
来实现这一点吗
我对这一切都很陌生,所以很有可能我只是错过了一些简单的事情,或者所有的命令都是错误的:)
如果我的问题不清楚,请提前道歉
有什么方法可以使用-Version来实现这一点吗
答案是肯定的。当您使用.nuspec
文件时,可以使用[assembly:AssemblyVersion(“1.0.0.*”)]
中的版本。只需将版本添加到宏中,就可以在生成事件中使用此宏,如:@(VersionNumber)
要完成此任务,请卸载您的项目。然后在项目的最后,在结束标记
之前,放置以下脚本:
<PropertyGroup>
<PostBuildEventDependsOn>
$(PostBuildEventDependsOn);
PostBuildMacros;
</PostBuildEventDependsOn>
</PropertyGroup>
<Target Name="PostBuildMacros">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="Targets" />
</GetAssemblyIdentity>
<ItemGroup>
<VersionNumber Include="@(Targets->'%(Version)')"/>
</ItemGroup>
</Target>
使用AssemblyVersion(“2.0.0.0”)
进行内置调试时的结果:
在版本中构建时:
并将assembly属性放入
#如果DEBUG
块不是一个选项?您是否考虑过迁移到vs 2017中集成了NuGet支持的新csproj格式?这是用于.NET标准项目的格式,也可用于.NET Framework NuGet包。它集成了MSBuild支持,因此更易于使用szenario@MartinUllrich这可能是一种选择,但我不能说任何一种方式,因为我在这方面还不是很了解。你能再解释一下这是怎么回事吗?还有,我还没有调查过,但我会的!这就是我需要的,非常感谢!!对您的答案进行一些更改以帮助他人。。当回答中应该使用-Version
时,您仍然使用了-Suffix
,然后在该行的末尾有一个额外的)
。哦,这似乎只是因为我不符合SemVer 2.0.0。。但我让它按我所需要的方式工作,所以这很好!