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

Visual Studio单元测试读取同目录JSON文件提示找不到文件如何解决

解决方案

问题1:设置「始终复制」仍找不到文件

你存放在Models文件夹下的JSON文件设置始终复制后,会在输出目录保留原有的文件夹层级,不会直接放到输出根目录,所以你直接在输出根目录查找文件肯定会报错。

  • 第一步:先手动打开输出目录C:\Path\ServerTests\bin\Debug\net5.0,确认是否存在Models子文件夹,且子文件夹内有JsonObjectAsArray.json文件。
  • 第二步:调整读取路径,拼接对应文件夹层级:
var baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var jsonPath = Path.Combine(baseDir, "Models", "JsonObjectAsArray.json");
var jsonContent = File.ReadAllText(jsonPath);
  • 如果输出目录不存在对应文件,直接打开ServerTests.csproj项目文件,确认存在以下配置,没有就手动添加后重新生成项目:
<ItemGroup>
  <None Update="Models\JsonObjectAsArray.json">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
</ItemGroup>

问题2:嵌入资源读取返回null

你之前的代码拼接的资源名错误,嵌入资源的命名规则为「项目默认命名空间.文件夹路径.文件名」,文件夹层级用.连接,你放在Models文件夹下的文件,资源名需要加上.Models前缀,你之前的代码缺失了这部分所以找不到资源。
正确的读取代码如下:

TypeInfo typeInfo = typeof(JsonConverterTests).GetTypeInfo();
// 补充Models文件夹对应的前缀
string resourceName = $"{typeInfo.Namespace}.Models.JsonObjectAsArray.json";
using Stream stream = typeInfo.Assembly.GetManifestResourceStream(resourceName);
using StreamReader reader = new StreamReader(stream);
string json = reader.ReadToEnd();

如果依然找不到,可以先输出程序集内所有嵌入资源名称,确认正确的资源名后再使用:

var allResourceNames = typeInfo.Assembly.GetManifestResourceNames();
// 打断点查看allResourceNames数组,找到JSON文件对应的实际资源名直接使用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:09:00