对解决方案项目原因“类型”的间接引用在未引用的程序集中定义
本文关键字:引用 解决方案 程序 程序集 定义 集中 类型 项目 | 更新日期: 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忽略/覆盖B
对A
的引用,并使用我的项目A
的输出代替?
是否有一些assemblyBinding
或类似的选项,我可以使用使构建工作?
如果我没理解错的话,这就是你的依赖关系图:
TA --> B
| |
| V
---> A
听起来你必须显式地设置构建顺序。A
必须在B
之前构建,B
必须在TA
之前构建,否则B
和TA
将引用A
的不同版本。如果B
在A
之前构建,那么它将引用A
的旧版本。
您可以通过在B中使A
成为项目引用或在Visual Studio中显式设置解决方案的项目依赖项来解决此问题。
我这样做了:
- 更改
TA.csproj
在相同的解决方案中不引用项目A
,而是引用与B
引用的相同的DLL。 - 将
App.config
添加到TA
,使用assemblyBinding
元素强制。net加载我在解决方案中构建的A
版本,用于B
DLL。