MSBuild / t:pack Nuget-Package始终具有相同的版本

Pet*_*ter 4 msbuild tfs .net-core

我正在/t:packTFS-Build中创建一个nuget-package 。我不能使用Nuget-Pack-Step,因为我正在使用

<TargetFramework>netstandard2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

如何AssemblyVersion在Nuget包装上使用我的产品?因为我的Assembly-Version是正确的,但是我的Nuget版本始终保持不变1.0.0.0

注意我正在使用C#文件而不是该.csproj文件作为我的程序集信息。

有没有可能?

想分享那个链接

And*_*nov 8

使用当前版本的 MSBuild,可以指定PackageVersion参数:

msbuild ProjectName.csproj -t:Pack -p:PackageVersion=1.2.3
Run Code Online (Sandbox Code Playgroud)


Mar*_*ich 6

集成了MSBuild的Pack目标从项目内部的MSBuild属性中读取其值(PackageVersion具体而言,默认为Version,默认为VersionPrefix,后继为VersionSuffix)。

从新的程序集属性读取此值具有开箱即用的支持,因为新项目格式旨在从确定NuGet包元数据的同一配置中生成这些程序集属性。

但是,您可以通过以下方式扩展构建:将自定义目标添加到csproj文件中,该文件在以下过程中读取已构建程序集的标识msbuild /t:Pack

<Project>

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn);ReadPackageVersionFromOutputAssembly</GenerateNuspecDependsOn>
  </PropertyGroup>

  <Target Name="ReadPackageVersionFromOutputAssembly" DependsOnTargets="Build">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
      <Output TaskParameter="Assemblies" ItemName="PackAssembly" />
    </GetAssemblyIdentity>
    <PropertyGroup>
      <PackageVersion>%(PackAssembly.Version)</PackageVersion>
    </PropertyGroup>
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

请注意,此目标将仅msbuild.exe在Windows(Visual Studio开发人员命令提示符)或Linux / Mac上的mono 5.2+ 的“完整MSBuild”上运行。当前不适用于dotnet pack(.NET Core版本的MSBuild)。