【问题标题】:Is it correct to add a reference to an assembly that is not directly used by the project?添加对项目不直接使用的程序集的引用是否正确?
【发布时间】:2014-09-16 16:10:51
【问题描述】:

我有一个由 3 个项目组成的解决方案。

  • 一个包含我的 edmx 图的实体框架
  • 我的核心业务
  • 还有一个用于我的网络应用

当我在服务器或托管服务上发布我的代码时,我收到此运行时错误:

{"无法加载文件或程序集 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其之一 依赖关系。系统找不到文件 指定。":"EntityFramework,版本=4.4.0.0,文化=中性, PublicKeyToken=b77a5c561934e089"}

我收到此错误是因为我的实体框架程序集未发布。我的服务器上缺少实体框架 dll 文件。我知道为什么。我没有在我的 Web 应用项目中引用它,因为此项目中不需要此程序集。我的另外两个项目中引用了该程序集。

我可以通过在我的网络应用程序中添加实体框架引用来轻松解决我的问题。我可以这样做吗?是的,但是添加对项目不直接使用的程序集的引用是否是好的编程?我能做什么?


更多信息

  • 实体框架:参考实体框架
  • 我的核心业务:参考实体框架,因为我在这里操作我的实体
  • 还有一个用于我的网络应用程序:在 UI 和核心业务之间充当门面的网站。我在这里没有引用或使用实体框架。

我没有任何编译错误> 我只有一个运行时错误,因为我的实体框架没有发布。

在这种情况下,在 Windows 应用程序中,我没有在项目中引用我的 dll,而是通过构建后操作复制它。对于需要发布或部署的网络应用程序,我不知道该怎么做。

【问题讨论】:

  • 哪个项目给你这个错误?
  • 如果 A 使用 B,B 使用 C,那么除了 B 之外,A 还必须引用 C。编译器在检查依赖项时通常比我们任何微弱的尝试都更加一致。如果它说它需要EntityFramework,那么它通常真的需要它。再次检查您没有使用任何与 EF 相关的内容。
  • 如果它在 app.config 或 web.config 中并且您没有使用 EntityFramework dll,那么只需将其删除。如果它从服务器中丢失,那么您需要安装 .net 4.0 或 4.5 以那台服务器
  • 最好的做法是拆分你的库,这样你就只链接你真正需要的功能。
  • 这样做有点奇怪。只需从引用中删除 EF。现在编译器会告诉你你忽略了什么。

标签: c# .net entity-framework .net-assembly


【解决方案1】:

据我了解,您的问题是间接引用的程序集不会被复制到输出目录。所以我认为最好的方法是将EntityFramework 的引用添加到您的 Web 和 Windows 项目中。

查看这个答案:Copying indirectly referenced assembly to output directory - assembly is missing

引用不会自动级联,所以添加一个引用 OLAF.Tools 也不添加对 SQLXML 的引用。如果你想 使用您的 exe 部署 SQLXML,然后是最方便的方法 是从您的 exe 显式添加对 SQLXML 的引用,并设置它 复制本地。没有这个,它就不会被部署。

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多