TFS2017 dotnet内部版本未覆盖版本号

时间:2019-01-17 21:35:39

标签: msbuild tfsbuild tfs2017 msbuild-task .net-standard-2.0

我正在使用TFS2017构建过程,并且在对程序集进行版本控制时遇到问题。我正在使用dotnet构建任务,命令设置为build,项目设置为**/*.sln,参数设置为--configuration $(BuildConfiguration) /p:Version=$(Build.BuildNumber)

查看TFS构建日志时,将执行正确的命令(见下文)

"C:\Program Files\dotnet\dotnet.exe" build C:\_agent\_work\13\s\*nameofsolution*.sln --configuration Release /p:Version=1100.1.0.0005

但是程序集的版本(文件版本和产品版本)显示为1.0.0。

csproj文件中没有<Version>元素。

当我以生成代理用户身份在生成服务器上运行上述generate命令时,程序集已正确版本化。 csproj或解决方案属性中是否缺少某些内容?

2 个答案:

答案 0 :(得分:0)

TL&DR

请确保您随后在构建服务器上进行构建的步骤传递了任何必要的--no-build标志,以防止dotnet命令在默认情况下重新编译!!!例如:

dotnet test my.csproj --no-build --no-restore
dotnet publish my.csproj --output mydir --no-build --no-restore


好!在将TeamCity用于构建服务器时,我遇到了这个确切的问题。我将通过TeamCity进行构建过程,并且我的输出nuget文件将包含默认版本为1.0.0.0的DLL。但是,当我查看构建日志时,我将从日志文件中使用dotnet build命令,在服务器上运行它,然后在bin目录中获取版本化的dll。 / p>

这就是我发现正在发生的事情。在我的构建管道中,在构建命令之后 ,我还正在运行其他命令,例如dotnet testdotnet publish。默认情况下,这些命令将在没有构建参数的情况下重新编译解决方案/项目!此外,它们还将重新编译任何引用的 dependency 项目。

答案 1 :(得分:0)

我遇到了同样的问题,发现如果.csproj包含 <GenerateAssemblyInfo>false</GenerateAssemblyInfo>的version参数将被完全忽略。请参阅与此相关的open issue。将其设为true或删除此项都可以解决问题。