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类读取该路径的配置文件
可选更稳定方案
如果可以调整配置文件的存放位置,更推荐将配置文件设置为单元测试项目的嵌入资源,不需要查找磁盘路径,构建服务器兼容性更高:
- 在 Visual Studio 中右键配置文件 → 属性 → 生成操作 → 选择「嵌入的资源」
- 读取嵌入资源的代码示例:
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
相关产品推荐
相关产品推荐

