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

C#单元测试中读取源文件夹配置文件 适配构建服务器运行方案咨询

C#单元测试跨环境读取Source文件夹配置文件方案

核心实现思路

通过当前执行的单元测试程序集定位基准路径,向上溯源找到Source根目录,全程无硬编码路径,只要本地和构建服务器的代码目录结构一致,就能正常运行,符合你提到的GetExecutingAssembly相关实现思路。

具体实现代码

using System.Reflection;
using System.IO;

public static string GetConfigFilePath(string configFileName)
{
    // 获取当前执行的单元测试程序集所在目录
    string assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    DirectoryInfo currentDirInfo = new DirectoryInfo(assemblyDir);

    // 向上遍历父目录,直到找到Source文件夹
    while (currentDirInfo != null)
    {
        if (currentDirInfo.Name.Equals("Source", StringComparison.OrdinalIgnoreCase))
        {
            // 拼接得到配置文件全路径
            return Path.Combine(currentDirInfo.FullName, configFileName);
        }
        currentDirInfo = currentDirInfo.Parent;
    }

    throw new DirectoryNotFoundException("未找到Source根目录,请检查代码目录结构是否符合预期");
}

// 调用示例,假设配置文件名为test.config
string configPath = GetConfigFilePath("test.config");
// 后续可直接用File类读取该路径的配置文件

可选更稳定方案

如果可以调整配置文件的存放位置,更推荐将配置文件设置为单元测试项目的嵌入资源,不需要查找磁盘路径,构建服务器兼容性更高:

  1. 在 Visual Studio 中右键配置文件 → 属性 → 生成操作 → 选择「嵌入的资源」
  2. 读取嵌入资源的代码示例:
using System.IO;
using System.Reflection;

// 资源名格式为 项目默认命名空间.配置文件所在文件夹名.配置文件名
Stream resStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourTestProjectNamespace.test.config");
using (StreamReader reader = new StreamReader(resStream))
{
    string configContent = reader.ReadToEnd();
    // 解析配置内容即可
}

注意事项

  • 确保构建服务器拉取代码后的目录结构和本地一致,Source目录为代码根目录,单元测试项目在Source目录的子层级即可
  • 若使用磁盘路径读取方案,需要确保构建服务器的运行账号对Source目录有可读权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:03