gpt4 book ai didi

c# - 当此引用已从另一个项目添加时,为什么我需要添加相同的引用

转载 作者:行者123 更新时间:2023-12-01 22:24:07 25 4
gpt4 key购买 nike

这是一个问题,假设我有两个项目:

  1. 应用程序(控制台)
  2. DataAccess(类库)。

在DataAccess项目中,有一个继承自DbContext的DataContext类

public class DataContext : DbContext {...}

在应用程序项目中,我添加了 DataAccess 引用,并在 main 方法中添加了以下语句:

using (var context = new DataContext ()){...}

但 Resharper 显示

The type DbContext is defined in an assembly not referenced.

为什么我需要再次添加相同的程序集?

为什么我无法从 DataAccess.dll 获取 DbContext 定义?

(DataAccess项目已通过NuGet添加EntityFramwork.dll)

编辑1:当一个类型继承另一个类型时(例如:从DbContext继承的DataContext),为什么编译器没有在同一个dll中包含DbContext的定义,所以在另一个项目中,我们只需要添加对child的引用类型的 dll ?

最佳答案

因为您的类库(.dll)不“包含”其依赖程序集。因此,如果您的执行程序集想要使用您的类库,它也需要引用依赖程序集。

(这与配置文件有点相同,它们也不是嵌入的,因此即使您在类库的配置文件中定义了连接字符串,您仍然需要将其定义到启动中 -也向上申请。)

如果您确实想将库嵌入到单个 dll 中,您可以查看 ILMerge但建议仅在启动应用程序中包含您需要的所有库。

另一个好的(我可以推荐)是 Costura.Fody 。您只需通过 NuGet 安装它,无需任何配置,当您下次构建应用程序时,它会将所有内容嵌入到您的类库中。

关于c# - 当此引用已从另一个项目添加时,为什么我需要添加相同的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com