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

使用csi.exe执行.csx脚本时,如何获取脚本自身路径?

获取CSX脚本自身路径(csi.exe执行场景)

我之前也碰到过这个痛点!用csi.exe运行.csx脚本时,AppDomain.CurrentDomain.BaseDirectory确实只会返回解释器本身的路径,根本拿不到脚本自己的位置。不过好在有几种靠谱的方法能解决这个问题,而且和#r指令的相对路径逻辑完全一致。


方法一:解析命令行参数(最可靠)

当你用csi.exe执行脚本时,脚本文件的路径肯定会作为命令行参数传入,我们只需要把它提取出来就行:

using System;
using System.IO;
using System.Linq;

// 遍历命令行参数,找到第一个非选项的参数(即脚本路径)
var scriptPath = Environment.GetCommandLineArgs()
    .Skip(1) // 跳过第一个参数(csi.exe的路径)
    .First(arg => !arg.StartsWith("/")); // 排除以/开头的选项参数

// 获取脚本所在的绝对目录
var scriptDirectory = Path.GetFullPath(Path.GetDirectoryName(scriptPath));

Console.WriteLine($"脚本文件路径:{scriptPath}");
Console.WriteLine($"脚本所在目录:{scriptDirectory}");

这个方法的优势在于兼容性极强,不管你是用老版本的MSBuild下的csi,还是.NET Core/.NET 5+的csi都能生效。而且它和#r指令的路径逻辑完全匹配——#r "..\bla\asdf.dll"就是基于这个脚本目录来解析的。

补充:处理特殊场景

如果你的脚本是通过标准输入执行的(比如csi.exe < yourscript.csx),那这个方法就失效了,但这种场景在实际开发中很少见,大部分时候都是直接指定脚本文件路径运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:38