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

使用NCrunch测试文件读取方法时抛出System.IO.DirectoryNotFoundException异常

解决NCrunch测试时System.IO.DirectoryNotFoundException异常的问题

嘿,这个问题我之前也碰到过!NCrunch的临时工作目录机制很容易踩这个坑,我来给你一步步解决:

问题根源

你运行API时正常,测试时报错,核心原因是:NCrunch会把测试项目的编译产物复制到它专属的临时工作目录(就是你看到的C:\Users\shawn\AppData\Local\NCrunch\23344\21\EmailAPI.Tests\bin\Debug\netcoreapp2.0\...路径),但你的HTML模板文件并没有被同步到这个目录里。而直接运行API时,程序用的是项目本身的输出目录,文件已经存在,所以没问题。

具体解决方案

  • 第一步:确保模板文件被同步到输出目录
    找到BaseEmail.html以及Emails/Templates下的所有模板文件,在Visual Studio里右键点击文件 → 选择「属性」:

    • 将「复制到输出目录」设置为**「如果较新则复制」或「始终复制」**
    • 确认「生成操作」设置为**「内容」**(默认一般是这个,但最好检查下)
      这样每次编译项目时,这些文件都会被复制到项目的输出目录,NCrunch同步测试文件时也会把它们带过去。
  • 第二步:用程序集位置动态构建文件路径
    别在代码里写死相对路径或绝对路径!改用当前程序集的位置来动态拼接路径,这样不管是API运行还是NCrunch测试,都能精准找到文件。示例代码:

    using System.Reflection;
    using System.IO;
    
    // 获取当前执行程序集的目录
    var assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    // 拼接模板文件的完整路径
    var templateFilePath = Path.Combine(assemblyDirectory, "Emails", "Templates", "BaseEmail.html");
    // 读取文件内容
    var templateContent = File.ReadAllText(templateFilePath);
    
  • 第三步:检查NCrunch的项目配置(可选)
    如果前两步做完还是报错,打开NCrunch的项目设置,切换到「Advanced」标签页:

    • 确保「Copy referenced assemblies to workspace」和「Copy output files to workspace」选项处于启用状态
      这能保证NCrunch把所有必要的依赖文件都复制到它的临时工作目录中。

另外补充:如果模板文件是在EmailAPI项目里,而测试项目引用了EmailAPI,一定要确保EmailAPI项目里的文件已经正确设置了「复制到输出目录」,这样测试项目在引用时才会同步这些文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:44