TFS2017 dotnet 版本不覆盖版本号

dav*_*ter 4 msbuild msbuild-task tfsbuild .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
Run Code Online (Sandbox Code Playgroud)

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

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

当我作为构建代理用户在构建服务器上运行上述生成命令时,程序集的版本控制正确。我的 csproj 或解决方案属性中是否缺少某些内容?

Eve*_*ent 5

TL&DR

确保构建服务器上的后续构建步骤传递任何必要的--no-build标志,以防止dotnet命令默认重新编译!例如:

dotnet test my.csproj --no-build --no-restore
dotnet publish my.csproj --output mydir --no-build --no-restore
Run Code Online (Sandbox Code Playgroud)

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

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


And*_*lov 5

我遇到了同样的问题,发现如果 .csproj 包含 <GenerateAssemblyInfo>false</GenerateAssemblyInfo>版本参数,则完全被忽略。请参阅与此相关的未决问题。制作它true或删除该项目应该可以解决问题。