nuget/msbuild如何将包的lib内容复制到输出目录-rules?

问题描述 投票:0回答:1

TL;DR消费 nuget 包内的

lib
目录的确切规则是什么?

在我的 C# .NET SDK 项目中使用 Visual Studio 中的 NuGet 包时,包

lib
文件夹的内容将复制到输出目录。

发布的包中 lib 文件夹的布局有一定的规则,例如

lib/TxM/*
文件需要按 目标框架 进行分组,而且我发现
*.resources.dll
受到特殊对待。

各种 NuGet 文档主题中散布着提示。该文件夹的布局,然后将(通过 msbuild/nuget)复制到项目输出文件夹中的内容以及从项目本身引用的内容(“链接”)。

但是,我无法找到有关管理 Visual Studio 的 nupckg 内容中的文件使用规则的正确文档。

具体来说,我似乎观察到,并且我想我已经看到它提到过,只有直接位于

lib/TxM/*.*
的文件才会被引用,而任何子文件夹都会被忽略 - 管理这个的确切规则是什么?


列出我迄今为止找到的片段

以下是我迄今为止找到的有关此问题的信息列表。

我想强调的一个具体的宝石是“对于许多包来说,lib 的工作方式与 NuGet 2.x 中的相同,” ...如果有人能告诉我规则是什么,那就太好了赞赏。

https://learn.microsoft.com/en-us/nuget/create-packages/select-assemblies-referenced-by-projects#packagereference-support

...使用PackageReference,NuGet选择编译和运行时资产 ...

编译资产更喜欢

ref/<tfm>/*.dll
(例如
ref/net6.0/*.dll
),但如果不存在,那么它就会掉落 返回
lib/<tfm>/*.dll
(例如
lib/net6.0/*.dll
)。

运行时资产更喜欢

runtimes/<rid>/lib/<tfm>/*.dll
...回落到
lib/<tfm>/*.dll

https://github.com/NuGet/docs.microsoft.com-nuget/blob/9c6c26ea385deaad4bd92a7a88d170796352bab1/docs/archive/project-json-and-uwp.md#L65:

Lib
:对于许多包,该库的工作方式与 NuGet 中的工作方式相同 2.x,但具有可在其中使用的名称的扩展选项,以及在使用时选择正确子文件夹的更好逻辑 包裹。

https://learn.microsoft.com/en-us/nuget/reference/nuspec#include-assemble-files

如果您遵循创建包中描述的约定,您就可以 不必在 .nuspec 文件中显式指定文件列表。 ...

当包安装到项目中时,NuGet 会自动添加 对包的 DLL 的程序集引用,不包括那些 命名为

.resources.dll
因为它们被认为是本地化的 卫星组件。

https://learn.microsoft.com/en-us/nuget/create-packages/creating-a-package#from-a-convention-based-working-directory

lib/{tfm}
:程序集 (.dll)、文档 (.xml) 和符号 (.pdb) 给定目标框架名称 (TFM) 的文件

https://learn.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks#framework-version-folder-struct

...您总是使用不同的方式在

lib
下创建子文件夹 区分大小写的框架名称...

...你永远不应该拥有一个不适合的库版本 特定于框架并直接放置在根 lib 文件夹中。 ...

...要在构建包时轻松包含所有这些文件,请使用

**
<files>
部分中的递归
.nuspec
通配符:

<file src="lib\**" target="lib/{framework name}[{version}]" /> 
c# visual-studio nuget packagereference
1个回答
0
投票

从描述中,你已经找到了很多相关的文档。这些应该足以解释你想要的很多事情。

我想强调的一个具体要点是“对于许多包来说,lib 都可以工作” 与 NuGet 2.x 中的方式相同,“

对于这个你想了解的事情,你可以看看这些官方文档:

按 Nuget 2 的目标框架对依赖项进行分组

还有

按 Nuget 2 的目标框架对内容文件和 PowerShell 脚本进行分组

© www.soinside.com 2019 - 2024. All rights reserved.