首页 > 解决方案 > .Net/VisualStudio 如何处理项目依赖项,每个项目依赖项具有相同 nuget 包的不同 nuget 目标

问题描述

我在 .Net 4.6.1 中有一个 Web 服务项目,我们称它为 Project X,它有 2 个项目引用(两个类库),我们称它们为 Project A 和 B

A在 packages.config 中有这个:

<package id="NLog" version="4.5.3" targetFramework="net35" />

虽然X 和 B在他们的 packages.config 中有这个:

<package id="NLog" version="4.5.3" targetFramework="net461" />

现在,当我在项目 X 的​​解决方案中运行此命令时:

更新包 - 重新安装 nlog -ignoreDependencies

此外,我构建了 X 的解决方案,然后运行 ​​X。现在我想知道使用项目 A 或 B 的项目 X 中的代码流是否适用于它们在 A 或 B 的代码中具有的任何基于 nlog 的日志记录?

如果回答这个问题需要更多解释,那么请求分享任何参考链接,这将帮助我理解客户端应用程序的这种设置和 nuget 目标解决方案,该应用程序引用依赖项的依赖项与给定 nuget 包的不同 nuget 目标。

谢谢

编辑:

恕我直言,建议的问题是重复的,因为它讨论了解决方案具有不同nuget版本的项目时的场景,这不是我的情况。

因为我的问题是关于两个项目具有相同的 nuget 版本但不同的 targetFramework。

A一样,它是 targetFramework="net35",而对于B 和 X,它是 targetFramework="net461"。

但是所有 3 个项目 A、B 和 X 都使用相同的版本,即 4.5.3。抱歉,我之前给出的配置显示版本不同,但这不是我要谈论的,因此已编辑以使版本相同。

所以问题再次是一个项目如何在构建/执行客户端应用程序(即此处的X)期间解决每个使用相同版本但不同 targetFramework 的项目依赖项中的 2 个/更多项目依赖项。

是不是像 X 会有最高 targetFramework 的 nuget dll 被拾取并复制到它的 bin 中?如果不是,那会发生什么?

标签: c#asp.netvisual-studio-2015nuget.net-4.6

解决方案


是不是像 X 会有最高 targetFramework 的 nuget dll 被拾取并复制到它的 bin 中?如果不是,那会发生什么?

项目 X 将拾取 nuget .Net 461 dll 并将其复制到它的 bin,但不是因为最高的 targetFramework。NLog 那是因为项目 X直接使用目标框架 461引用了 nuget 包。

您可以将 MSBuild 项目构建输出详细程度更改为正常或更高,工具->选项->项目和解决方案->构建和运行->MSBuild 项目生成输出详细程度。在输出窗口中,您可以注意到复制到项目 x bin 文件夹NLog.dll下:net45

在此处输入图像描述

并将NLog.dll下面的net35复制到项目A bin 文件夹下:

在此处输入图像描述

要查看有关此问题的更多信息,我建议您可以查看以下线程:

如果在解决方案中使用项目依赖项,MSBuild 不会复制引用(DLL 文件)

希望这可以帮助。


推荐阅读