我正在使用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或解决方案属性中是否缺少某些内容?
答案 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 test
和dotnet publish
。默认情况下,这些命令将在没有构建参数的情况下重新编译解决方案/项目!此外,它们还将重新编译任何引用的 dependency 项目。
答案 1 :(得分:0)
我遇到了同样的问题,发现如果.csproj包含
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
的version参数将被完全忽略。请参阅与此相关的open issue。将其设为true
或删除此项都可以解决问题。