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

单元测试调用项目A方法时资源文件访问失败,报MissingManifestResourceException求助

解决单元测试中资源文件加载失败的问题

这种单元测试里资源加载抛MissingManifestResourceException的情况我碰到过好几次,核心原因大多是单元测试环境的程序集加载逻辑、资源引用方式和主应用不一样,咱们一步步来排查解决:

  • 确保单元测试项目直接引用了项目B
    虽然你的主项目A已经引用了B,但单元测试运行时的程序集加载上下文是独立的,可能无法间接加载B的资源。右键单元测试项目 → 添加引用 → 选中项目B,确保它被直接引用。

  • 修正ResourceManager的程序集获取逻辑
    你当前用的Assembly.GetAssembly()在单元测试环境下可能拿到的是单元测试项目的程序集,而不是包含资源的A或B项目的程序集。建议改成用具体类来定位程序集:

    // 假设FormTexts实际属于项目B,用B里的任意类来获取程序集
    ResourceManager rm = new ResourceManager("MyProjects.B.Resources.FormTexts", typeof(SomeClassInProjectB).Assembly);
    // 如果是A项目链接了资源且命名空间是MyProjects.A.Resources.FormTexts,就用A里的类
    // ResourceManager rm = new ResourceManager("MyProjects.A.Resources.FormTexts", typeof(YourClassInProjectA).Assembly);
    var str = rm.GetString("Title");
    

    这种方式能精准定位到包含资源的程序集,避免加载歧义。

  • 检查资源文件的生成属性
    分别查看项目B的原FormTexts.resx和项目A里的链接资源:

    1. 右键资源文件 → 属性
    2. 确认生成操作设置为嵌入的资源,而不是内容或其他选项
      链接过来的资源偶尔会丢失属性设置,手动确认一遍更稳妥。
  • 清理缓存并重新生成解决方案
    单元测试很容易被旧的编译缓存坑到,先手动删除所有项目的bin和obj文件夹,然后右键解决方案 → 重新生成,再运行单元测试。

  • 检查单元测试的工作目录
    部分测试框架(比如MSTest)默认工作目录不是主项目的输出目录,导致资源无法被找到。可以在单元测试里先输出当前目录排查:

    Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
    

    如果目录不对,在单元测试项目的属性 → 调试 → 工作目录中设置为项目A的输出路径(比如$(SolutionDir)A\bin\$(Configuration)\)。

按照上面的步骤排查,尤其是修正程序集获取逻辑那一步,大概率能解决你的问题。我之前就是因为单元测试环境下Assembly.GetAssembly()加载了错误的程序集,才出现和你一样的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:46:47