【发布时间】: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