【问题标题】:How to find a directory on code running on Azure pipeline on MS agent如何在 MS 代理上的 Azure 管道上运行的代码上查找目录
【发布时间】:2021-04-22 19:48:25
【问题描述】:

我有一个具有以下结构的 Visual Studio c# 项目:

SolutionFolder
  |-Folder1
      |- Project1
      |- TestProject1
  |-Folder2
      |- Project2
      |- TestProject2
  |-TaskFolder
      |-file
 ...etc

其中一个管道任务在 SolutionFolder 下创建一个文件夹并在其中写入一个文件。 (即任务文件夹/文件

当测试项目运行时,我想读取这个文件。 我在代码中调用 GetCurrentDirectory,在我的机器中这将返回 TestProject 文件夹的父级。即(Folder1)然后我可以转到父级(即SolutionFolder)和相关文件。 任务文件夹/文件

但是,当它在管道中运行时,GetCurrentDirectory 返回 a/1 并且父级是 a。所以我必须添加 1/s/SolutionFolder/TaskFolder/File 才能访问该文件。

是否有办法获取适用于 MsAgent 和本地计算机的文件夹起点。 即(获取 SolutionFolder)然后是 /TaskFolder/File。这样代码在这些环境下运行时都是一样的?

附:在本地运行时,文件需要手动放置在 /TaskFolder/File 中,因为这主要用于调试。

提前致谢。

【问题讨论】:

  • 作为一种解决方法,您可以编写两个涉及读取文件的相同测试方法。在 testmethodA 中硬编码本地路径,并在 testmethodB 中使用管道路径。然后根据测试过滤器指定要运行的测试。关于测试过滤器,可以参考这个case
  • 感谢您的回复,您认为有两条路径并按照下面的 Giulio Vian 选择它是个好主意。我会试试的。

标签: c# azure-pipelines azure-pipelines-tasks


【解决方案1】:

我会检查环境变量BUILD_SOURCEDIRECTORY,如果null你在本地场景中并调用GetCurrentDirectory,如果没有使用concat SolutionFolder/TaskFolder/File到环境变量值。

【讨论】:

  • 谢谢,值得一试。
  • ``` 字符串变量 = "BUILD.SOURCESDIRECTORY"; //Build.SourcesDirectory var Envvalue = System.Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.Machine); ``` 在有和没有 Enviroment.VariableTarget 参数的情况下都试过这个,在管道上运行时我得到 Null 或 Empty。有什么想法吗?
  • 小心 . (点)vs _(下划线)BUILD_SOURCESDIRECTORY => Environment var Build.SourcesDirectory => 在 C# 代码的情况下,管道 var 选择 _(下划线)版本
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2022-08-15
  • 1970-01-01
  • 2018-10-29
  • 2023-03-03
相关资源
最近更新 更多