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版本?
答案 0 :(得分:0)
确保打包正确的配置。您可以打包发布配置,只在.csproj部分中设置与调试配置相关的Version
元素,反之亦然。
使用程序集属性(AssemblyVersion
等) - 请注意它们是在已编译的程序集中进行的,因此要使它们生效,您需要构建项目,并以正确的配置执行。通常会在Debug配置中测试代码,然后在不切换到Release的情况下更改vesrion和build,然后打包Release配置。
为避免所有这些问题,最好在打包时始终构建,并始终打包显式配置:
nuget pack XYZ.Core.Messaging.csproj -Build -Properties Configuration=Release ...