首页 > 解决方案 > 如何使用 Azure PowerShell 在 Azure Pipeline 中分配程序集名称?

问题描述

我正在将其他人编写的 PowerShell 脚本转换为 Azure Build Pipeline。我只是在学习 Azure Pipelines。当我运行管道时,我收到以下错误消息:

无法设置“AssemblyName”,因为只能将字符串用作设置 XmlNode 属性的值

问题是我们必须签署程序集,以便我们可以在生成的应用程序(即 WPF 应用程序)上包含认证。

我试过搜索错误,但只得到与 .NET Reflection 相关的结果。这是 Azure PowerShell 管道任务,使用旧 TFS 构建中的代码对程序集进行签名。我通过 include 做了一个替换$(Build.BuildId),除了代码是 TFS 构建中使用的代码。这是任务的代码:

- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'Visual Studio Enterprise(/* removed */)'
    azurePowerShellVersion: LatestVersion
    ScriptType: 'InlineScript'
    Inline: |
      $config = ls -recurse "ACDC.csproj" | select -First 1
      
      $xml = [xml]""
      $xml.PreserveWhitespace = $true
      $xml.Load($config)
      $xml.Project.PropertyGroup |? AssemblyName |% {$_.AssemblyName=$env:Binaries}
      $xml.Save($config)
      
      $files = Get-ChildItem -Recurse AssemblyInfo.cs
      foreach ($file in $files){
         $content = Get-Content -Encoding UTF8 $file
         $content = $content -replace '(?<=Assembly(File)?Version\(")(\d+)\.(\d+)\.(\d+)(\.\d+)',"`$2.`$3.$(Build.BuildId))`$5";
         Set-Content $file -Encoding UTF8  -Value $content
      }

标签: azurepowershellazure-devopsazure-pipelines

解决方案


无法设置“AssemblyName”,因为只能将字符串用作设置 XmlNode 属性的值

我可以重现这个问题。这个问题的根本原因是你没有设置变量名: Binaries

要解决此问题,您可以尝试以下示例:

Yaml 示例:

variables:
- name: Binaries
  value: test

pool:
  vmImage: windows-latest

steps:
- task: AzurePowerShell@5
  displayName: 'Azure PowerShell script: InlineScript'
  inputs:
    azureSubscription: kevin0322
    ScriptType: InlineScript
    Inline: |
           $config = ls -recurse "WPFRssFeedReader.csproj" | select -First 1
           
           $xml = [xml]""
           $xml.PreserveWhitespace = $true
           $xml.Load($config)
           $xml.Project.PropertyGroup |? AssemblyName |% {$_.AssemblyName=$env:Binaries}
           $xml.Save($config)
           
           $files = Get-ChildItem -Recurse AssemblyInfo.cs
           foreach ($file in $files){
              $content = Get-Content -Encoding UTF8 $file
              $content = $content -replace '(?<=Assembly(File)?Version\(")(\d+)\.(\d+)\.(\d+)(\.\d+)',"`$2.`$3.$(Build.BuildId))`$5";
              Set-Content $file -Encoding UTF8  -Value $content
           }
    preferredAzurePowerShellVersion: 3.1.0

经典编辑器:

您需要在变量选项卡中定义变量。

在此处输入图像描述


推荐阅读