对解决方案项目的间接引用导致“类型在未引用的程序集中定义”

时间:2015-08-18 19:33:41

标签: c# .net visual-studio dll visual-studio-2013

我的解决方案包含项目A和测试项目TA。测试项目引用解决方案项目A和一些DLL B。 DLL B引用A生成的DLL。我的Foo类型在A上定义,并由TA进行测试。

当我告诉你建造TA时,VS2013向我发射炸弹:

The type 'Foo' is defined in an assembly that is not referenced. You must add a reference to assembly 'A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.   C:\mysolution\src\TA\TestFoo.cs 32  17  TA

然而Foo类型是在A上定义的,这是我的解决方案!甚至编辑都明白!!!只是构建器坚持使用B定义的任何内容。

如何告诉VS忽略/覆盖BA的引用,并使用项目A的输出?

我可以使用一些assemblyBinding或类似的选项来进行构建吗?

2 个答案:

答案 0 :(得分:0)

如果我理解你的话,这就是你的依赖关系图:

TA --> B
 |     |
 |     V
  ---> A

听起来你必须明确设置构建顺序。 A之前必须构建BB之前必须构建TA,否则BTA将引用不同版本的A 。如果在B之前构建A,那么它将引用较早版本的A

您可以通过在B中创建A 项目引用或在Visual Studio中为解决方案显式设置项目依赖项来解决此问题。

答案 1 :(得分:0)

我这样解决了:

  • 在同一解决方案中将TA.csproj更改为不引用项目A,而是引用B引用的相同DLL。
  • App.config添加到TA,其中assemblyBinding元素强制.NET加载我在解决方案中构建的A版本,用于{ {1}} DLL。