gpt4 book ai didi

NuGet:未添加对运行时文件夹中程序集的引用

转载 作者:行者123 更新时间:2023-12-03 21:50:20 27 4
gpt4 key购买 nike

我有一个针对两个不同操作系统/框架的项目:

  • net461在 Windows 和
  • netcoreapp2.0在 OSX

  • 我试图弄清楚如何为 NuGet 正确打包。根据 this post我应该能够像这样打包它们:
    /runtimes/win/lib/net461/myassembly.dll
    /runtimes/osx/lib/netcoreapp2.0/myassembly.dll

    当我将 NuGet 包添加到另一个项目时,打包的程序集不会作为对目标项目的引用添加。

    然后我在某处读到您还需要将引用库添加到 /ref文件夹,所以我尝试了这个:
    /runtimes/win/lib/net461/myassembly.dll
    /runtimes/osx/lib/netcoreapp2.0/myassembly.dll
    /ref/net461/myassembly.dll
    /ref/netcoreapp2.0/myassembly.dll

    在这种情况下,程序集被添加为对目标项目的引用,我可以构建它,但所需的程序集不会复制到输出文件夹。

    所有这一切的文档都非常模糊,我很迷茫。

    我错过了什么?

    相关的 NuGet 问题: https://github.com/NuGet/Home/issues/7316

    更新:我整理了一个 sample project这证明了我正在努力实现的目标。特别是请参阅自述文件的底部,标题为“NuGet Packaging”。

    最佳答案

    这就是我最终想通/猜到的(因为尽我所能知道其中一些没有官方文档)

  • 添加到/runtimes 文件夹的文件不会自动添加为对目标项目的引用。
  • /ref 和/runtime 文件夹应相互结合使用,并且仅用于 .NET Core 目标。尽我所能,.NET Framework 目标显然不支持这些文件夹。
  • /ref 文件夹用于编译时引用,此处添加的任何内容都将作为对目标项目的引用添加。
  • /ref 文件夹中的程序集不需要实现——每个公共(public) API 都可以抛出一个未实现的异常。然而,在实践中,您通常只需复制其中一个实现程序集并将其声明为编译时 API。
  • 我已阅读(但尚未测试自己)/ref 文件夹中的程序集必须是“任何 CPU”构建。如有必要,您可以使用 CorFlags 实用程序为此修补实现程序集。
  • /runtimes 文件夹用于为/ref 文件夹中包含的任何引用提供实现程序集。这些程序集在运行时和部署期间使用。
  • /runtimes 文件夹可以包含仅在运行时需要且客户端项目不需要查看的其他程序集。这些附加程序集不会作为引用包含在目标项目中,但可用于运行/部署。
  • 正如其他人所提到的,/runtimes 文件夹中的文件不会复制到构建的输出文件夹中。而是将配置文件放置在那里,告诉运行时如何从 NuGet 缓存中找到/runtimes 文件。
  • 对于 .NET Framework 目标(即:net461),只需使用/lib 文件夹,因为除了 Windows 之外,没有其他适用于 .NET 的运行时。

  • 把这一切放在一起,我原来的例子应该是这样的:
    /lib/net461/myassembly.dll                       (net461/Windows Compile and Runtime)
    /runtimes/osx/lib/netcoreapp2.0/myassembly.dll (netcore/OSX Runtime)
    /runtimes/win/lib/netcoreapp2.0/myassembly.dll (netcore/Win Runtime)
    /ref/netcoreapp2.0/myassembly.dll (netcore/* Compile Time)

    关于NuGet:未添加对运行时文件夹中程序集的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52397501/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com