Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio NuGet:仅当$(ConfigurationName)=调试时,如何将自动递增的内部版本号附加到NuGet包版本?_Visual Studio_Package_Nuget_Nuget Package_Post Build Event - Fatal编程技术网

Visual studio NuGet:仅当$(ConfigurationName)=调试时,如何将自动递增的内部版本号附加到NuGet包版本?

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

我正在尝试使用VisualStudio后期生成事件来完成此任务

我希望发生什么:

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。。但我让它按我所需要的方式工作,所以这很好!