【问题标题】:Nuget package referenced in 2 assemblies does not work2 个程序集中引用的 Nuget 包不起作用
【发布时间】:2022-01-14 07:21:37
【问题描述】:

我有一个这样构建的解决方案:

ProjectA -> Assembly2 -> Assembly1 -> NuGet 包 (Newtonsoft.JSON)

我目前正在开发 Assembly2,它依赖于 Assembly1。我用 ProjectA 调试。这么久,Newtonsoft.dll 被复制到我的 bin 文件夹中,一切正常。

现在我想在我的 Assembly2 中直接使用 Newtonsoft,所以我将它添加为 NuGet 包。之后,不再将 Newtonsoft.dll 复制到 bin 文件夹中。

我尝试直接下载 Newtonsoft.dll(或通过“浏览...”直接使用 Assembly1 中的 Newtonsoft.dll)。这也有效。 似乎只有当我在 Assembly2 中使用 NuGet 时才会出现此问题。有人可以解释这种行为吗?

编辑: 我使用了完全相同版本的 Newtonsoft 和 我将 .Net Standard(2.0) 用于我的程序集和 .NET Framework(4.7.2) 用于我的项目(控制台应用程序)。

我认为传递依赖在这里不起作用。我没有引用另一个项目(在那里我可以看到 Assy1.deps.json),而是构建的 DLL。

【问题讨论】:

  • MSBuild binlog,您可以使用msbuildlog.com 查看,其中包含 MSBuild 所做的所有事情,因此您可以通过这种方式计算出来。如果您可以分享reproducable example,那么其他人可能会为您进行分析。
  • 你能放一张你的项目浏览器的屏幕截图(假设你使用VS)并扩展了引用吗?我想如果你说项目,你的意思是解决方案,而组装你的意思是项目。但可能是错的:-)
  • 乍一看,我会说,你没有在你的 assy2 中使用 json。您将 Assy1 引用为 dll,这很好,但在构建时可能会进行一些优化,其中不需要的引用将被忽略,因此在构建 assy2 时会被忽略。也许项目浏览器中的参考条目上有一个选项,例如“Local Copy=true”(恐怕,我混淆了您的索引:-))
  • 永远不要在其他项目的输出文件夹中向 dll 添加依赖项。这是不透明且易碎的。如果您的项目树中有其他引用以相同的方式设置,那么这可能是您遇到问题的原因。
  • 感谢您的所有 cmets!我尝试阅读 MSBuild 日志,但找不到任何明显的东西。我正在尝试在接下来的几天创建一个可重现的示例。由于我们的工作规则,我无法截取我的解决方案。但我可以告诉。 Assy1 和 Assy2 是项目(类库、DLL),ProjectA 是一个简单的 ConsoleApp 项目,仅用于测试。

标签: c# dependencies nuget .net-assembly


【解决方案1】:

确实令人费解。从你的描述来看应该没问题,但是......

“传递依赖”是你的朋友。 如果 assy1 引用 NS.Json,而 assy2 引用 assy1,则 NS.Json 可用于 assy2。不需要从 assy2 引用 NS.Json。

这是一件好事。这意味着删除了一些版本控制地狱。如果您想升级 NS.Json,那么您只有 1 个地方可以这样做。 ref 并不分散在您的项目中。 如果您还遵循拥有“干净”依赖图的良好做法,这将非常有效。

【讨论】:

  • OP:“现在我想在我的 Assembly2 中直接使用 Newtonsoft”。因此,它不再只是传递依赖,而是直接依赖。
  • 嗯,我明白了。那么在 assy2 中通过直接引用它们(添加引用、浏览...)来使用来自 assy1 的 DLL 是常识吗?
  • @imre “使用”和需要直接引用之间存在差异。我们可能在谈论稍微不同的事情?但是 assy2 不需要直接引用即可使用 newtonsoft 位
  • @towa 我不确定我是否明白你在说什么,但是......我会建议 - 不 - 在 assy2 中向 NS 添加直接引用。只需依赖来自 assy1 的传递引用。 ... assy1 可以看到的所有内容都可以在 assy2 中使用。
  • 我使用的是 .net 标准 2.0 而不是 .net 核心。我找不到任何关于 .net 标准 2.0 的传递依赖的信息。另外我不知道如何通过 Assy1 从 Assy2 访问 Newtonsoft。我必须直接在 Assy2 中引用 Newtonsoft dll 才能使其正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多