如何避免主项目调用引用DLL中的同名resx资源文件
问题原因
你的问题核心是两个项目的SetUp资源类产生了调用冲突,常见触发原因有3种:
- 两个项目的
SetUp资源类处于完全相同的命名空间下,Tester项目代码中调用Configurations.SetUp时,编译器优先绑定了Coder程序集中的同名类 - 访问浏览器配置的
Browsers函数定义在Coder项目内部,该函数默认调用的是Coder自身的SetUp资源类,Tester调用这个函数时自然拿到Coder的配置 - Tester项目的
SetUp.resx配置错误:生成操作不是「嵌入的资源」,或者自动生成的SetUp.Designer.cs中资源路径和实际嵌入的资源名不匹配,导致ResourceManager找不到Tester自身的资源, fallback到了引用的Coder程序集中的同名资源
修复方案
1. 解决命名空间冲突
任选一种即可:
- 给两个项目的
SetUp资源类设置不同的命名空间,比如Coder的放到Coder.Configurations下,Tester的放到Tester.Configurations下,调用时写全限定名,Tester中取自身配置写Tester.Configurations.SetUp.Browser - 在Tester项目的代码头部加别名引用:
using TesterSetUp = TestProject3.Configurations.SetUp;,后续访问自身配置统一用TesterSetUp.Browser
2. 解决函数定义在Coder的问题
如果Browsers函数是Coder项目的公共方法:
- 把函数改造为支持传入ResourceManager参数,Tester调用时把自身的
SetUp.ResourceManager传进去 - 或者直接在Tester项目单独实现自己的
Browsers函数,不调用Coder中的对应方法
3. 检查并修复Tester的resx配置
右键Tester项目中的SetUp.resx文件,打开属性面板,确认以下配置:
- 生成操作:嵌入的资源
- 自定义工具:
ResXFileCodeGenerator - 自定义工具命名空间:和
SetUp.Designer.cs中的命名空间保持一致
配置完成后右键SetUp.resx选择「运行自定义工具」,重新生成Designer.cs文件,确保资源路径正确。
内容的提问来源于stack exchange,提问作者Akane
相关产品推荐
相关产品推荐

