nuget 包中的外部 .so 库存在问题

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

我有一个 nuget 包,其中包含一些库(.dll 和 .so)。 我们需要用于 Windows 环境的 .dll 和用于 linus 环境的 .so。 我检查了这两个文件是否都打包在 nuget 中,情况确实如此。

如果我将此 nuget 安装到 Web 服务中并启动它,.dll 将被放置在正确的位置(可执行路径)。然而,即使 web 服务在 Linux 环境中启动,.so 文件也不会被复制。如果是这种情况,.dll 也会被复制到可执行路径中。

这就是我在 nuget 项目中导入文件的方式:

 <ItemGroup>
    <Content Include="..\..\Lib\win64\dll\ericapi.dll">
        <Link>ericapi.dll</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <Pack>true</Pack>
        <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
</ItemGroup>

<ItemGroup>        
    <Content Include="..\..\Lib\lin64\lib\libericapi.so">
        <Link>libericapi.so</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <Pack>true</Pack>
        <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
</ItemGroup>

这是我的 nuget 的 lib 目录的屏幕截图:

如果 Web 服务在本地启动,则仅 .dll 被复制到“bin\Debug et8.0"

为什么会这样。这样只能复制.dll 文件吗?

c# linux nuget external .so
1个回答
0
投票

我想我刚刚解决了这个问题。我将“PackagePath”替换为“PackageCopyToOutput”。通过这个设置,我已经将所有文件放在正确的目录中,即使在 Linux 上也是如此:

<ItemGroup>
    <Content Include="..\..\Lib\win64\dll\ericapi.dll">
        <Link>ericapi.dll</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <PackageCopyToOutput>true</PackageCopyToOutput>
        <Pack>true</Pack>
    </Content>
</ItemGroup>

<ItemGroup>        
    <Content Include="..\..\Lib\lin64\lib\libericapi.so">
        <Link>libericapi.so</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <PackageCopyToOutput>true</PackageCopyToOutput>
        <Pack>true</Pack>
    </Content>
</ItemGroup>
© www.soinside.com 2019 - 2024. All rights reserved.