繁体   English   中英

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

[英]How does the NuGet pack command generate the package version?

NuGet 版本:4.5.1.4879

在使用“项目驱动”的 NuGet 包构建(即,将 .csproj 文件传递​​给nuget pack命令)时,我想我了解 NuGet 将如何确定要在生成的包中使用的版本。 具体而言,它将使用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 版本呢?

确保您打包了正确的配置。 您可以打包 Release 配置,同时仅在与 Debug 配置相关的 .csproj 部分中设置Version元素,反之亦然。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM