【问题标题】:Specifying the projectname within the DesktopPackageLocation during the Visual Studio Build task in TFS 2018在 TFS 2018 中的 Visual Studio 构建任务期间指定 DesktopPackageLocation 中的项目名称
【发布时间】:2018-10-13 05:13:46
【问题描述】:

伙计们,

我正在使用 TFS 2018 中的 Visual Studio Build 任务来构建多个 .NET Core 2.0 Web 应用程序。

解参数为: **\WebApp.*.sln

每个解决方案都类似于 WebApp.Prj1.sln、WebApp.Prj2.sln 等。

MSBuild 参数是: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip"

我想要创建特定于我正在构建的解决方案的 webapp.zip 文件。换句话说,类似: /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\$(build.projectname).zip"

我似乎无法找到允许我访问正在构建的解决方案或项目名称的内置变量。

这可能吗?如果没有,有人可以发布模拟 Visual Studio 构建任务的等效 powershell 脚本,以便我可以手动创建项目名称的 zip 文件吗?

谢谢。

【问题讨论】:

    标签: tfs msbuild


    【解决方案1】:

    默认不支持,也没有内置变量。

    如果要自定义 Visual Studio 构建任务的 PowerShell 脚本。您可以在构建代理机器上的构建代理工作目录 _work/vstsbuildxxtask 文件夹下找到VSBuild.ps1 脚本。

    看看这个帖子:Visual Studio Build step should allow multiple paths

    另一种方法是结合使用多个 Visual Studio Build 任务和 Copy and Publish Build Artifacts 来处理每个项目的多个 $(build.artifactstagingdirectory)\$(build.projectname).zip 包。


    更新:

    这里已经有相关的uservoice条目:Using Variable in Solution Path in a Visual Studio Build Task

    根据您的要求,作为一种解决方法,您可以将整个解决方案路径应用为构建变量并在构建时更改它。这意味着定义一个变量并设置值“$/repository/Development/Prj1/website name.sln”。如果要构建 Prj2,在排队构建时将 Prj1 更改为 Prj2。

    【讨论】:

    • 谢谢帕特里克。您能否为我指明正确的方向,将解决方案名称用于构建任务?在 vsbuild.ps1 脚本中,我看到以下输入参数: [string]$solution = Get-VstsInput -Name Solution -Require 我认为这会将当前解决方案带入此脚本。从那里,我看到 $MSBuildArgs 格式化的行: $MSBuildArgs = Format-MSBuildArguments -MSBuildArguments $MSBuildArgs -Platform $Platform ...等。我会在这里简单地添加一个额外的参数吗?如:-SolutionName $solution 再次感谢
    • @ArjayH。很抱歉后来的回复,没有收到您在 SO 中的评论的通知。仔细检查后,没有这种变量,Visual Studio Build 步骤不支持它。并且已经有相关的用户声音Using Variable in Solution Path in a Visual Studio Build Task,您可以投票并关注它,TFS PM 将审核您的建议。
    • @ArjayH。根据您的要求,我想出了一个解决方法,您可以将整个解决方案路径应用为构建变量并在构建时更改它。这意味着定义一个变量并设置值“$/repository/Development/Prj1/website name.sln”。如果要构建 Prj2,请在构建队列时将 Prj1 更改为 Prj2。
    • 谢谢帕特里克。您之前的建议让我研究了 VSBuild.ps1 脚本,这让我了解了它是如何工作的。我发现解决方案参数和构建参数只传递给 VSBuild.ps1 脚本一次。对于我所需要的,我希望 build.SolutionName 或 build.ProjectName 等参数会根据当时构建的解决方案进行更改。相反,整个事情都被修复并直接传递给 msbuild。
    • 很酷的是一个循环任务,它包装了基于当前 sln/项目设置解决方案/项目变量的 Visual Studio 构建任务。这个循环任务将采用类似'*\WebApp..sln'的解决方案参数,循环通过它并获取WebApp.prj1.sln和WebApp.prj1.csproj的第一个sln/csproj,将此设置为 build.SolutionName、build.ProjectName 参数并调用 VS Build 任务并重复其他与模式匹配的 sln/proj。我最终通过引用项目中的一个自定义配置文件来解决我的直接问题。
    【解决方案2】:

    使用多个 Visual Studio 构建任务,每个解决方案一个。

    【讨论】:

    • 感谢您的回复,但这不起作用,因为将不断添加新的 WebApp.PrjN.sln 解决方案,我不想每次都手动添加构建任务被添加。
    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2021-03-30
    • 2019-04-24
    相关资源
    最近更新 更多