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配置,而仅Version
在.csproj部分中设置与Debug配置相关的元素,反之亦然。
具有程序集属性(AssemblyVersion
等)-请注意,它们嵌入在已编译的程序集中,因此要使它们生效,您需要构建项目并以正确的配置进行操作。通常,您会在Debug配置中测试代码,然后更改版本和构建而不切换到Release,然后打包Release配置。
为了避免所有这些问题,最好在打包时始终进行构建,并始终打包一个显式配置:
nuget pack XYZ.Core.Messaging.csproj -Build -Properties Configuration=Release ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句