Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当目标条目文件不在根目录中时,Azure DevOps自定义生成任务扩展无法找到PowerShell VstsTaskSdk.psd1_Powershell_Azure Devops_Azure Pipelines_Azure Devops Extensions - Fatal编程技术网

当目标条目文件不在根目录中时,Azure DevOps自定义生成任务扩展无法找到PowerShell VstsTaskSdk.psd1

当目标条目文件不在根目录中时,Azure DevOps自定义生成任务扩展无法找到PowerShell VstsTaskSdk.psd1,powershell,azure-devops,azure-pipelines,azure-devops-extensions,Powershell,Azure Devops,Azure Pipelines,Azure Devops Extensions,我不久前构建了Azure DevOps构建/发布任务扩展,最近它在运行时开始报告以下警告: [警告]任务“等待”(1.2.3)正在使用不推荐使用的任务执行处理程序。任务应使用支持的任务库: 因此,按照链接到,然后钻取到,看起来我需要在我的task.json文件中将我的扩展名从旧的PowerShell执行处理程序更新到新的PowerShell3执行处理程序,因此我进行了更改,代码现在如下所示: "execution": { "PowerShell3&quo

我不久前构建了Azure DevOps构建/发布任务扩展,最近它在运行时开始报告以下警告:

[警告]任务“等待”(1.2.3)正在使用不推荐使用的任务执行处理程序。任务应使用支持的任务库: 因此,按照链接到,然后钻取到,看起来我需要在我的
task.json
文件中将我的扩展名从旧的
PowerShell
执行处理程序更新到新的
PowerShell3
执行处理程序,因此我进行了更改,代码现在如下所示:

  "execution": {
    "PowerShell3": {
      "target": "$(currentDirectory)/Code/Wait.ps1",
      "workingDirectory": "$(currentDirectory)"
    }
  }
按照页面上的说明,我已经完成了
Save Module-Name VstsTaskSdk-Path.\
下载SDK模块并将其提交到扩展任务根目录下的
ps\u modules\VstsTaskSdk
目录

但是,在MS Hosted agent上构建并运行扩展后,会出现以下错误:

[错误]未找到文件:“D:\a_tasks\Wait_f3e9b3d7-a528-5245-91c7-453406bcb038\1.2.17\Code\ps_modules\VstsTaskSdk\VstsTaskSdk.psd1”

我注意到它在
code
目录中查找
ps\u modules
目录,所以我尝试将它放在我的git repo中,但仍然会导致相同的错误

我找到了,但他们的解决方案是从他们的
ps\u modules\[version]\VstsTaskSdk
层次结构中删除版本目录,我还没有

我也发现了,看起来我做的每件事都是正确的,但我仍然得到了错误

这就是我的文件层次结构的外观:

|-- Wait\ <task root>
  |-- Code\
    |-- Convert-Unit.Tests.ps1
    |-- Convert-Unit.psm1
    |-- Wait.ps1
  |-- ps_modules\
    |-- VstsTaskSdk\
      |-- [All the module files, including VstsTaskSdk.psd1]
  |-- icon.png
  |-- task.json
|--Wait\
|--代码\
|--Convert-Unit.Tests.ps1
|--Convert-Unit.psm1
|--等等,ps1
|--ps_模块\
|--VstsTaskSdk\
|--[所有模块文件,包括VstsTaskSdk.psd1]
|--icon.png
|--task.json
我想问题可能是我将我的任务“业务逻辑代码”与 “任务基础结构代码”,将其放置在
code
目录中;也就是说,我的
task.json
文件和
Wait.ps1
目标入口点文件不在同一目录中。根据这个假设,我删除了
code
目录并转储了根目录中的所有文件,错误消失了(我现在收到了不同的错误,但它似乎已经解决了这个问题)

在迁移到新的PowerShell执行处理程序时,我可以做些什么来将“业务逻辑代码”与“任务基础结构代码”分开?我不确定它如何确定应该在哪里查找
ps\u modules
目录

代码也都是开源的,所以请随意使用

更新 虽然我无法解决如何将
task.json
和目标入口点PowerShell脚本文件放在不同目录中的问题,但我能够进行更改,使所有扩展基础结构代码都位于根目录中,而“业务逻辑”代码位于
code
目录中


如您所见,我选择在tasks根目录中创建一个
task.ps1
文件,并将其用作任务的目标入口点。更新到
PowerShell3
执行处理程序也意味着必须更新检索任务输入的方式,因此我使用
task.ps1
文件获取输入,然后只需调用
code\Wait.ps1
脚本。这使我能够保持代码的整洁和隔离,因此如果Azure DevOps决定再次使用新的执行处理程序更改内容,我将不需要接触
code
目录中的任何代码,只需接触
task.ps1
文件。

事实上,我认为您尝试的解决方案是,将扩展条目脚本(
task.ps1
)与SDK打包文件夹处于同一级别,是迄今为止您的最佳选择

作为正常的编译过程,当您启动输入脚本时,它会找到从相同文件夹级别自动存储
.dll
文件的文件夹。对于Azure Devops,用于存储
.dll
文件的默认文件夹是
ps\u modules
。这是一个默认操作,它与设计一致

这就是为什么您收到关于服务器正在从代码文件夹中查找
.dll
的错误的原因。此外,这也是为什么我们建议开发人员采用以下布局:


将SDK和脚本文件完全分离到两个文件夹中并非不可能,只要选择此布局,文件结构就会非常干净,但会大大增加代码成本(使用$PSScript root覆盖所有SDK加载脚本),以及以后的维护成本


创建条目脚本,并将其与SDK文件夹放在同一文件夹级别(
ps_modules
),然后从存储在同一文件夹中的相关脚本文件调用该函数,这是保持文件结构干净和维护代码可维护性的最佳方法,此外,它不会增加额外的代码消耗,这将导致代码冗余增加。

我提交此PR是为了更新文档,其中提到将任务入口点文件放在根目录中是
PowerShell3
执行处理程序的新要求。