You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署包后PowerShell启动.NET Core应用遇当前目录异常问题

解决Octopus Deploy中启动.NET Core应用时工作目录不符的问题

我之前也踩过这个坑!Octopus在完成Deploy Package步骤后,执行后续PowerShell脚本时的默认工作目录确实不是包解压后的目标文件夹,而是它自身的临时工作目录(就是你看到的C:\Octopus\Work...这类路径)。要解决这个问题,核心是拿到部署包的实际安装路径,下面给你两种靠谱的解决方案:


方法一:切换到包的安装目录后启动应用

利用Octopus内置的参数变量可以直接获取到部署包的安装目录,然后切换目录再执行启动命令:

# 获取对应部署步骤的包安装目录(注意替换步骤名称,如果你的Deploy步骤不叫"Deploy Package")
$installDirectory = $OctopusParameters["Octopus.Action[Deploy Package].Output.Package.InstallationDirectoryPath"]

# 切换到该目录
Set-Location -Path $installDirectory

# 可选:打印当前目录验证(调试用)
Write-Host "当前工作目录已切换至: $(Get-Item -Path ".").FullName"

# 启动.NET Core应用
Start-Process "dotnet" -WindowStyle Hidden -ArgumentList "xxx.dll"

注意:如果你的Deploy Package步骤名称不是默认的"Deploy Package",一定要把变量里的[Deploy Package]改成你实际的步骤名称,比如步骤叫"Deploy My API",变量就写成Octopus.Action[Deploy My API].Output.Package.InstallationDirectoryPath。


方法二:直接指定DLL的完整路径启动

如果不想切换目录,也可以直接把DLL的完整路径作为参数传给dotnet命令:

# 获取包安装目录
$installDirectory = $OctopusParameters["Octopus.Action[Deploy Package].Output.Package.InstallationDirectoryPath"]

# 拼接DLL的完整路径
$dllFullPath = Join-Path -Path $installDirectory -ChildPath "xxx.dll"

# 启动应用(注意给路径加引号,避免路径含空格时出错)
Start-Process "dotnet" -WindowStyle Hidden -ArgumentList "`"$dllFullPath`""

这两种方法都能解决工作目录不对的问题,我个人更常用第一种,因为有些.NET Core应用可能依赖当前目录下的配置文件、静态资源等,切换到安装目录后运行更稳妥。

内容的提问来源于stack exchange,提问作者SiberianGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:34