【问题标题】:MSBuild Running Slow Called from PowerShell Script (Visual Studio 2019)从 PowerShell 脚本调用的 MSBuild 运行缓慢 (Visual Studio 2019)
【发布时间】:2020-05-06 01:36:31
【问题描述】:

我最近设置了一个新的 TFS 构建服务器,我正在调查构建过程中的一些延长时间段。其中一个时期是重新编译我们的 Selenium 测试 .dll。首先,通过 MSBuild 恢复包,这很好。然后,脚本挂起大约 10 分钟,而 .dll 实际被编译。

这在我们的 Visual Studio 2017 构建服务器上运行良好,(我相信编译需要几秒钟)但在 2019 年似乎有问题。

这是代码。我是否缺少一两个 MSBuild 参数?

$msbuild = """C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe"""

# Rebuild the Test source .dll...
Write-Host "********** Running UI Tests **********"

# Restore Selenium packages...
Write-Host "********** Restoring Selenium Packages **********"
&"C:\Nuget.exe\Nuget.exe" restore  $source\Development\12.0\Web\MyAppWeb\MyCo.SeleniumUITest\MyCo.SeleniumUITest.sln -DisableParallelProcessing
Write-Host "********** Selenium Packages Restored **********"

# Changes for new MSBuild....
$projfile = "$source\Development\12.0\Web\MyAppWeb\MyCo.SeleniumUITest\MyCo.SeleniumUITest.sln"

try
{
    start-process $msbuild -ArgumentList @($projfile,'/t:Rebuild','/p:configuration=Release') -Wait
    Write-Host "********** Selenium .dll compiled successfully! **********"
}
catch
{
    Write-Host $_.Exception.Message
    exit 1
}

感谢任何帮助!如果这应该出现在 PowerShell 论坛中,请告诉我。我认为 TFS/MSBuild 是正确的地方,因为我希望它只是一个参数或调用调整。

【问题讨论】:

    标签: powershell tfs msbuild


    【解决方案1】:

    从 PowerShell 脚本调用的 MSBuild 运行缓慢 (Visual Studio 2019)

    状态:

    (运行效率这个问题很难给出准确的答案。问题的原因很多,大部分都和环境有关,让我们很难复现。所以我们对于这个问题无法给出直接正确的答案,我们只能给你一些故障排除。为了避免在往返 cmets 中失去联系,我将这些故障排除作为答案而不是 cmets。)

    首先,使用带有 Azure devops 服务的脚本而不是 TFS Build Server 2019,检查 Azure devops 服务是否仍然出现此问题,如果 Azure devops 服务也出现此问题,则表示此问题不应该与 TFS 相关,更多与 MSBuild/environment/powershell 脚本相关。

    其次,使用 build in task nuget restore 和 msbuild task 代替 powershell 脚本,检查你是否有这个问题,如果也有这个问题,这个问题应该与脚本无关。如果不是,这个问题应该与脚本有关。由于我们使用不同的 TFS 服务器,我们需要检查此脚本是否需要更新。

    第三,检查Visual Studio 2017 Build Server和Visual Studio 2019 Build Server中的powershell版本,确保它们使用相同的版本。

    如果还是找不到原因,可以开启调试日志,将挂起的日志分享给我们,让我们得到更多信息。

    希望这会有所帮助。

    【讨论】:

    • 我会尝试所有这些东西,但我只是尝试在 PowerShell ISE 中运行我的后期构建脚本的那一部分,似乎 .dll 的构建速度相当快,但该过程似乎挂起因为 PowerShell 环境在很长一段时间内都没有返回提示。将这些转换为实际任务而不是脚本绝对是个好主意。
    • PowerShell 版本被排除,因为两个构建服务器上的版本相同。
    • @GiorgosMyrianthous,请检查我的状态。我无法将所有内容添加为评论,长度限制!
    • 于是更奇怪的事情发生了。在我的后期构建脚本中,我还发布了一个通过 MSBuild 完成的项目。那工作得很好而且很快。这首先发生在我的脚本中,然后是上面提到的我的测试 .dll 问题的重新编译。将测试 dll 从脚本移植到 MSBuild 任务后,发布大约需要 10 分钟,而不是不到 1 分钟。所以,我想我也会把它移植到一个任务中。但是,这个项目没有解决方案文件,所以我直接在 Build Definition 任务中调用 .proj 文件。我收到以下错误...
    • "错误:没有为项目“MyBo.WebApi.csproj”设置 OutputPath 属性。请检查以确保您为此项目指定了有效的配置和平台组合。配置=' Release' Platform='Any CPU'。您可能会看到此消息,因为您正在尝试构建没有解决方案文件的项目,并且指定了该项目不存在的非默认配置或平台。我目前正在尝试将平台作为 AnyCPU(没有空间),所以不确定这是否是问题所在。
    【解决方案2】:

    我将 MSBuild 脚本任务移到构建定义任务中以消除缓慢。当通过 PowerShell 脚本调用 MSBuild 时,我没有确定挂起的原因。

    当我注意到我使用的是 Visual Build 任务而不是更合适的 MSBuild 任务时,后来尝试通过 .proj 文件发布的问题得到了解决。

    使用 MSBuild 步骤时需要注意的一点。如果指向 .proj 文件并针对 Any CPU 进行编译,则在 Task 中将其设置为 AnyCPU,中间没有空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      相关资源
      最近更新 更多