我在TFS-Build中创建了一个带/t:pack
的nuget-package。我不能使用Nuget-Pack-Step,因为我正在使用
<TargetFramework>netstandard2.0</TargetFramework>
如何在Nuget-Package上应用我的AssemblyVersion
?因为我的汇编版本是正确的,但我的Nuget版本始终是1.0.0.0
。
注意我使用C#文件作为我的程序集信息而不是.csproj
文件。
有可能吗?
想要分享link。
答案 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