我假设您的意思是您的托管代码是使用DllImport
属性来调用本机代码,在 .NET 生态系统中称为平台调用或 P/Invoke。我之所以提到这一点,是因为如果您在 P/Invoke 和 nuget 周围搜索术语,您可能会更幸运地找到存在的堆栈溢出问题、博客文章等。出于这个原因,尝试找出您使用的功能的官方名称或常用名称很有用,这样您就知道要搜索什么。不幸的是,我认为 NuGet 团队目前没有关于这种情况的任何文档。
SDK 风格的项目支持runtime\
包中的目录,尽管我认为这也有点无证。我不知道使用PackageReference
(PR)的传统项目,但packages.config
(PC)肯定不支持runtimes\
. 对于 PC 项目,包作者通常(总是?)包含构建目标以在构建后复制本机程序集。在包中,本机 dll 位于其他地方,通常作者将它们放在build
目标旁边的目录中,但我想我也看到了目标从runtime
目录中复制,因此该包同时支持 PC 和 SDK 风格的项目。
我建议您尝试考虑一些具有 .NET 绑定的常用本机库,并查看包的工作原理(nupkg
只是zip
重命名)。我的猜测是 sqlite 或 curl,或者 asp.net core 的 kestrel web 服务器如何捆绑 libuv(或者如果不再这样做,则在早期版本中捆绑)。我现在正在度假,所以没有动力深入挖掘自己。