nuget pack命令如何生成包版本?

时间:2018-04-04 18:36:56

标签: c# nuget nuget-package

NuGet版本:4.5.1.4879

使用"项目驱动" nuget包构建(即,将.csproj文件传递给nuget pack命令),我想我理解nuget将如何确定要在生成的包中使用的版本。具体来说,如果它存在于AssemblyInfo中,它将使用AssemblyInformationalVersion,如果AssemblyVersion不存在,它将使用AssemblyInformationalVersion。 这似乎在我的一些程序集中按预期工作(我在程序集和程序包之间有一个简单的1:1关系--1个程序集生成1个同名的程序包),但在其他程序集中没有。

在一个有问题的程序集中,AssemblyInfo包含:

[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("2.0.0.0")]
[assembly: AssemblyInformationalVersion("2.0.0")]

在.csproj文件中我还有其他内容(请注意<Version>标记):

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{E233E8E2-EB9E-461F-80C2-63F9AFCC425D}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>XYZ.Core.Messaging</RootNamespace>
    <AssemblyName>XYZ.Core.Messaging</AssemblyName>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>

    <Version>2.0.0</Version>

    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
    <TargetFrameworkProfile />
  </PropertyGroup>
是的,我没有.nuspec文件。

尽管有这些设置,当我尝试使用此命令构建程序包时:

nuget pack XYZ.Core.Messaging.csproj  -OutputDirectory "c:\build\nuget-local" -Suffix "local"

它将包构建为XYZ.Core.Messaging.1.0.0-local.nupkg

对于我使用类似命令(只是一个不同的csproj文件)构建的一些其他包,具有相同的AssemblyInfo内容,那些正确构建版本为2.0.0的包。

那么nuget从哪里获得1.0.0版本?

1 个答案:

答案 0 :(得分:0)

确保打包正确的配置。您可以打包发布配置,只在.csproj部分中设置与调试配置相关的Version元素,反之亦然。

使用程序集属性(AssemblyVersion等) - 请注意它们是在已编译的程序集中进行的,因此要使它们生效,您需要构建项目,并以正确的配置执行。通常会在Debug配置中测试代码,然后在不切换到Release的情况下更改vesrion和build,然后打包Release配置。

为避免所有这些问题,最好在打包时始终构建,并始终打包显式配置:

nuget pack XYZ.Core.Messaging.csproj  -Build -Properties Configuration=Release ...