如何在 TFS 部署任务的远程 PowerShell 会话 运行 中将文件依赖项添加到 VisualStudioRemoteDeployer

How to add a file dependency to VisualStudioRemoteDeployer in remote PowerShell session running from TFS deployment task

我正在使用 TFS 部署任务 "PowerShell on Remote Machines"。它运行我之前复制到目标机器的 PowerShell 脚本。 PowerShell 脚本调用依赖于 .exe 的 cmdlet。执行脚本时出现以下错误:

System.IO.FileNotFoundException: C:\Windows\DtlDownloads\VisualStudioRemoteDeployer3be2a227-e8d4-4e1f-b155-d1a53666793b\NeuronExplorer.exe

我不知道如何真正将 NeuronExplorer.exe 放入临时目录以供执行。

我试过GACing它。 GAC 成功,但我得到同样的错误。

我试过将路径添加到PATH环境变量,也出现同样的错误。

如果我将 NeuronExplorer.exe 复制到临时文件夹中,我就成功了,但我必须非常快才能真正让它工作。必须有一种方法可以使该文件在远程上下文中可用。

这里最简单的解决方法是通过完整的显式路径调用可执行文件。

此外,您没有指定是否在计算机级别更改了 PATH 环境变量,但如果更改了,则很可能需要在该计算机上重新启动代理以使更改反映在代理进程中.

我最终解决这个问题的方法是在调用任何依赖于 .exe 的 API 代码之前将 .exe 复制到我的 System.AppDomain.CurrentDomain.BaseDirectory 中。

let fileName = (FileInfo pathToExe).Name
let targetFile = sprintf "%s\%s" System.AppDomain.CurrentDomain.BaseDirectory fileName
File.Copy(pathToExe, targetFile, true)

我可以使用 System.AppDomain.CurrentDirectory.Load(assemblyBytes) 完成同样的事情,但 File.Copy 对我有用。

希望这可以帮助其他人不必为这个特定问题而苦恼。