Msbuild 在VSTS生成中将ClickOnce应用程序版本和MinimumRequiredVersion设置为最新版本

Msbuild 在VSTS生成中将ClickOnce应用程序版本和MinimumRequiredVersion设置为最新版本,msbuild,azure-devops,clickonce,azure-pipelines,Msbuild,Azure Devops,Clickonce,Azure Pipelines,我在CI生成中有一个visual studio生成步骤,该步骤使用以下MSBuild参数创建桌面应用程序的clickonce文件: /target:publish /p:ApplicationVersion=$(Year:yyyy).$(Month).$(DayOfMonth).$(Build.BuildId) /p:MinimumRequiredVersion=$(Year:yyyy).$(Month).$(DayOfMonth).$(Build.BuildId) /p:InstallUrl=

我在CI生成中有一个visual studio生成步骤,该步骤使用以下MSBuild参数创建桌面应用程序的clickonce文件:

/target:publish /p:ApplicationVersion=$(Year:yyyy).$(Month).$(DayOfMonth).$(Build.BuildId) /p:MinimumRequiredVersion=$(Year:yyyy).$(Month).$(DayOfMonth).$(Build.BuildId) /p:InstallUrl=$(InstallUrl)
$(Build.BuildId)和$(InstallUrl)变量将被替换为正确的值,但$(Year:yyyy)、$(Month)和$(DayOfMonth)变量不会被替换。我使用相同的变量来设置General选项卡上的Build number格式,它们会被正确替换。在VSTS的构建步骤中不可能使用基于日期的变量吗

编辑:似乎使用$(Build.BuildNumber)可以工作,但我希望将生成定义名称包含在生成编号格式中,这显然不适用于该版本。

$(年:yyyy)
$(月)
$(月日)
是只能在生成编号格式字段中使用的标记,而不能在其他任何地方使用

我建议您在执行Visual Studio构建任务之前,利用PowerShell任务运行的以下脚本(使用内联脚本),动态创建这些变量:

$date = get-date
write-host "##vso[task.setvariable variable=Year;]$(($date).year)"
write-host "##vso[task.setvariable variable=Month;]$(($date).month)"
write-host "##vso[task.setvariable variable=Day;]$(($date).day)"
然后可以使用
$(年)
$(月)
$(日)
来代替当前用作其他MSBuild参数的标记

$(年:yyyy)
$(月)
$(月日)
是您只能在版本号格式字段中使用的标记,而不能在其他任何地方使用

我建议您在执行Visual Studio构建任务之前,利用PowerShell任务运行的以下脚本(使用内联脚本),动态创建这些变量:

$date = get-date
write-host "##vso[task.setvariable variable=Year;]$(($date).year)"
write-host "##vso[task.setvariable variable=Month;]$(($date).month)"
write-host "##vso[task.setvariable variable=Day;]$(($date).day)"

然后可以使用
$(年)
$(月)
$(日)
来代替当前用作其他MSBuild参数的标记

你用卢卡的解决方案解决这个问题吗?你用卢卡的解决方案解决这个问题吗?这非常有效。我不喜欢为这么小的东西添加powershell脚本,但它可以工作。我想我可能只是改变版本号格式,然后处理这个问题。为什么在代理启动时,$(年),$(月)等都没有初始化,这是我无法理解的。这非常有效。我不喜欢为这么小的东西添加powershell脚本,但它可以工作。我想我可能只是改变版本号格式,然后处理这个问题。为什么在代理启动时,$(年),$(月)等都没有初始化,这是我无法理解的。