如何添加 NuGet 仅源包依赖项
Posted
技术标签:
【中文标题】如何添加 NuGet 仅源包依赖项【英文标题】:How To Add NuGet Source Only Package Dependencies 【发布时间】:2021-03-11 02:12:46 【问题描述】:我创建了一个框架,用于与 Microsoft 的 CRM/XRM/CDS/PowerPlatform/DataVerse 插件一起使用。这些插件不能包含对外部非 .Net Framwork 非 MicrosoftSDK dll 的任何依赖。我没有使用 ILMerging 依赖项,而是使用了 NuGet 的 Source Only Packages,它允许通过 NuGet 共享源文件本身,从而无需引用和 ILMerging 其他 dll。
我正在尝试使这些 NuGet 包与 dotnetcore 兼容。有两个 nuget 包 DLaB.Xrm.Source 和 DLaB.Common.Source。 DLaB.Xrm.Source 依赖于 DLaB.Common.Source。我能够成功地为 dotnetcore 的 Common 包更新 Nuget 包,一切看起来都很棒。然后我更新了 dotnetcore 的 Xrm 包,但是当我测试只安装 DLaB.Xrm.Source 包时,它似乎没有添加 DLaB.Common.Source 包,因为现在我遇到了那些缺少的构建错误文件,即使它被列为依赖项:
我错过了什么吗?有没有一种方法可以让它发挥作用,或者我应该直接将 DLaB.Common.Source 文件包含在 DLaB.Xrm.Source 文件中?
这就是我在 NuSpec 文件中列出依赖项的方式:
<dependencies>
<group targetFramework="net">
<dependency id="DLaB.Common.Source" version="1.2.0.10" />
</group>
<group targetFramework="netcoreapp">
<dependency id="DLaB.Common.Source" version="1.2.0.10" />
</group>
</dependencies>
【问题讨论】:
尝试clean nuget caches或者直接删除C:\Users\xxx(current user)\.nuget\packages
下的所有缓存文件
所以@PerryQian-MSFT,是不是假设我正在做的事情应该有效,并且也应该安装依赖项?
【参考方案1】:
看起来这是为 NuGet 设计的。据此:
https://docs.microsoft.com/en-us/nuget/reference/nuspec#dependencies-element
内容文件被排除在外,所以我很可能必须在父项中包含依赖项的源文件。
排除:
包含/排除标签的逗号分隔列表(见下文),表示 在最终包中排除的依赖项。默认值 是构建,可以被覆盖的分析器。但内容/ ContentFiles 也被隐式排除在最终包中 不能被覆盖。用 exclude 指定的标签优先 超过包含指定的那些。例如,包括=“运行时, compile" exclude="compile" 和 include="runtime" 一样。
【讨论】:
既然你有解决方法,我建议你可以标记你的答案:)以上是关于如何添加 NuGet 仅源包依赖项的主要内容,如果未能解决你的问题,请参考以下文章
Nuget依赖项 - 如何在linux上显示NuGet的package.config依赖项树
如何从 NuGet 包及其依赖项安装 PowerShell 二进制 cmdlet (C#)