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

本文关键字:引用 解决方案 程序 程序集 定义 集中 类型 项目 | 更新日期: 2023-09-27 18:08:30

我的解决方案包含项目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或类似的选项,我可以使用使构建工作?

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

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

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

听起来你必须显式地设置构建顺序。A必须在B之前构建,B必须在TA之前构建,否则BTA将引用A的不同版本。如果BA之前构建,那么它将引用A的旧版本。

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

我这样做了:

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