.Net / VisualStudio如何处理具有相同nuget包的不同nuget目标的项目依赖项

时间:2018-06-06 06:15:22

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

我在.Net 4.6.1中有一个Web服务项目,我们称之为项目 X ,它有2个项目引用(都是类库),我们称之为项目 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的解决方案中运行此命令时:

  

Update-Package -reinstall nlog -ignoreDependencies

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

如果回答此问题需要更多解释,请请分享任何参考链接,这将有助于我理解客户端应用程序引用依赖关系的这种设置和nuget目标解析与给定nuget包的不同nuget目标。

由于

修改

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

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

A 类似,它是targetFramework =“net35”, 而对于 B和X ,它是targetFramework =“net461”。

但所有3个项目A,B和X使用相同的版本,即4.5.3。 对不起,我之前给出的配置显示版本不同,但这不是我打算谈论的,因此编辑后使版本相同。

所以再次提出问题是一个项目如何引用2个/更多项目依赖项,每个项目使用相同版本但不同的targetFramework在构建/执行客户端应用程序时得到解决,即 X

是否X会将nuget dll与最高的targetFramework一起拾取并复制到它的bin中?如果没有发生什么呢?

1 个答案:

答案 0 :(得分:1)

  

是否X会将nuget dll与最高的targetFramework一起拾取并复制到它的bin中?如果没有发生什么呢?

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

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

enter image description here

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

enter image description here

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

MSBuild doesn't copy references (DLL files) if using project dependencies in solution

希望这有帮助。