2

为了这个问题,我有一个结构如下的项目,其中每一层都映射到我的 Visual Studio 解决方案中的一个项目:

  • 表示层
  • 业务逻辑层
  • 数据层(使用实体框架)

我在数据层中定义了存储库类。在 BL 层中实例化它们时,我收到一条错误消息,指出缺少对实体框架程序集的引用。我添加了对在我的 DL 中使用的相同实体框架 dll 的引用,它可以工作。

我的问题是:为什么 BL 引用 DL 是不够的,为什么我还需要在 BL 中添加对 EF 的“附加”引用?我显然不想在我的解决方案中控制多个 EF 版本。

我认为我的 DL 是一个“原子”单元,它的所有对象都是自包含的,不需要其他任何东西来正常运行。为什么在 DL 中定义的实例化类时我仍然需要添加 EF 引用,DL 自己的 EF 引用呢?

4

1 回答 1

2

这确实是构建引擎 MSBuild 的工作方式。Visual Studio 过去不抱怨间接引用,只是在 TFS 构建服务器上发现它损坏了。至于他们为什么以他们的方式建造这个,我没有答案。

我有一个简单的解决方法:使用解决方案级别的 NuGet 包。您将实体框架包作为 NuGet 包添加到解决方案,并检查所有应具有此引用的项目。这种方式还可以防止多个不同的版本。

详细解释可以阅读这篇文章

于 2015-06-24T11:24:01.270 回答