【问题标题】:Including an unmanaged native library files to nuget output directory将非托管本机库文件包括到 nuget 输出目录
【发布时间】:2019-12-15 02:10:48
【问题描述】:

未管理的共享对象(.so 文件)不会复制到输出目录:

我有一个包装了 c++ 库的 .netstandard 2 项目(让我们将项目称为 wrap.csproj)。 该项目依赖于共享对象 (libgdal.so)。

我想将此项目用作 nuget,因此,将引用我的 nuget 的项目应该在 build/publish 文件夹中包含 wrap.dll 和 libgdal.so。

我将这个项目打包为 nuget。 但是引用这个 nuget 的项目(dotnet core)没有得到 libgdal.so 文件,只是 build/published 文件夹中的 wrap.dll,因此我遇到了运行时错误。

我将此属性添加到 nuget csproj:

<ItemGroup>
<None Include="libgdal.so">
<Pack>true</Pack>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

编辑:经过@zivkan 的帮助,我成功了

我需要做的就是像这样添加包路径:

<ItemGroup>
    <None Include="libgdal.so">
        <Pack>true</Pack>
        <PackagePath>runtimes/linux-x64/native</packagePath>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

【问题讨论】:

  • 如果你只想支持SDK风格的项目,我建议你看看libuv package并复制它的作用。如果你还想支持非 SDK 风格的项目(传统项目,“旧式”项目,随便你怎么称呼它们),我建议你复制 sqlite package 所做的。
  • @zivkan 谢谢!成功

标签: c# .net-core nuget nuget-package


【解决方案1】:

我需要做的就是像这样添加 PackagePath:

<ItemGroup>
    <None Include="libgdal.so">
        <Pack>true</Pack>
        <PackagePath>runtimes/linux-x64/native</PackagePath>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

(我的运行时间是 linux-x64)

【讨论】:

  • 您可以将自己的答案标记为“已接受的答案”。它是答案左侧向下箭头下方的复选框!
猜你喜欢
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多