【问题标题】:Indirect reference to solution project causes "Type is defined in an assembly that is not referenced"对解决方案项目的间接引用导致“类型在未引用的程序集中定义”
【发布时间】:2015-11-11 21:44:02
【问题描述】:

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

【问题讨论】:

  • 这听起来像是一个混乱的设置。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,但 B 不在我的解决方案中。它是一个依赖于 A 的外部 DLL。
  • 那你有版本不匹配的问题。 B 引用了旧版本的 A。您需要在重建 TA 之前重建 B。
  • 我知道,但我无法重建 B。我知道 B 可以与我的新版本 A 一起使用。我可以告诉 Visual Studio 重定向/覆盖此版本依赖项吗?
  • 重建 B 将对 A 的引用的“特定版本”属性更改为 false。这将阻止 B 寻找特定版本的 A。
【解决方案2】:

我是这样解决的:

  • TA.csproj 更改为不在同一解决方案中引用项目A,而是引用B 引用的同一个DLL。
  • App.config 添加到TA,并带有一个assemblyBinding 元素,该元素强制.NET 加载我在解决方案中为B DLL 构建的A 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2014-08-15
    • 2016-05-01
    • 2018-01-10
    相关资源
    最近更新 更多