我们在内部创建和托管NuGet包,使用源代码和深层依赖树。 我在让依赖项"表现"时遇到了一些问题。
为了清楚起见,这是专门通过VS或Rider将软件包安装到.Net Core/PackageReference项目中。 我不认为它是一个VS/Rider/etc错误,因为我们做了一些稍微错误的事情。
场景:
- 使用包引用样式编译创建"包 A" "contentFiles/any/any"。
- 在"contentFiles/any/any"下创建一个名为"Source"的子文件夹。
- 将源代码文件放在"源"文件夹中。
- 依赖于"包 B"。
- 再次使用"包引用"样式创建"包 B",并带有"源"子文件夹。
- 将源代码文件放在其"源"文件夹中。
- 打包并发布两者。
期望:
- 安装"包 A"(使用内置的 NuGet 包管理器 UI(。
- 您的项目将获得一个"源"文件夹。
- A 的源文件被引用到新的"Source"文件夹中,并与项目一起编译。
- 还安装了"包 B",因为它是一个依赖项。
- B 的源文件也被引用到"Source"文件夹中,并与项目一起编译。
- 包 A 可立即由项目使用,因为它的所有代码及其所有依赖项的代码都存在。
实际:
- 安装"包 A"。
- 您的项目将获得一个"源"文件夹。
- A 的源文件被引用到新的"Source"文件夹中,并与项目一起编译。
- 还安装了"包 B",因为它是一个依赖项。
- B 的源文件未引用到"源"文件夹中。
- 无法编译包 A 代码,因为 B 的源代码不在项目中。
- 手动安装"包 B",与安装"A"相同。
- B 的源文件被引用到项目中新的"源"文件夹中。
- 现在可以编译和使用"包 A"。
如果需要示例 nuspec 文件等,请告诉我。
谢谢
(这是来自 https://github.com/NuGet/Home/issues/8858 的交叉帖子。 一周没有回复(
NuGet的github(上面列出(的帖子最终得到了解决方案。 在 nuspec 中声明依赖项时,将include
设置为"运行时、编译、本机、内容文件、构建传递"(或其某种组合(,依赖项的文件将正确嵌入。 我仍在研究选项之间的差异,但你有它。