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

电子饭

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版本呢?

EVK

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章