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

时间:2017-12-14 16:39:19

标签: tfs msbuild .net-core

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

<TargetFramework>netstandard2.0</TargetFramework>

如何在Nuget-Package上应用我的AssemblyVersion?因为我的汇编版本是正确的,但我的Nuget版本始终是1.0.0.0

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

有可能吗?

想要分享link

2 个答案:

答案 0 :(得分:3)

MSBuild集成的Pack目标从项目内的MSBuild属性中读取其值(PackageVersion是特定的,默认为Version,而VersionPrefix默认为{{ 1}}反过来可以加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>

请注意,此目标只能在&#34;完整的MSBuild&#34;上运行,即Windows {visual studio developer命令提示符下的msbuild.exe或linux / Mac上的单声道5.2+。这当前不适用于dotnet pack(.NET Core版本的MSBuild)。

答案 1 :(得分:0)

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

msbuild ProjectName.csproj -t:Pack -p:PackageVersion=1.2.3