首页 > 解决方案 > 我的 nuget 包如何将 .so 文件复制到输出?

问题描述

我有一个提供一些功能的 nuget 包。在那个 nuget 包中,有一个对 libmediainfo 的引用,这是一个第三方.dll文件和.so文件。通过将以下内容添加到我的.csproj文件中,我已将它们包含在我的 nuget 包中:


    <ItemGroup>
        <Content Include="libmediainfo.dll">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            <Pack>true</Pack>
            <PackagePath>lib\$(TargetFramework)</PackagePath>
        </Content>
        <Content Include="libmediainfo.so">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
            <Pack>true</Pack>
            <PackagePath>lib\$(TargetFramework)</PackagePath>
        </Content>
    </ItemGroup>

现在,当我在我的主项目中包含该包时,只有第三方.dll文件被复制到 bin 目录,而不是.so文件。我在 linux docker 容器中运行,需要复制这两个文件。这个 nuget 包将在多个地方使用。如何.so仅通过添加对 nuget 包的引用来使消费项目也包含该文件?

标签: visual-studionuget

解决方案


libmediainfo.dll是一个程序集,因此可以将其打包到 lib 文件夹中。但libmediainfo.so它只是一个简单的文件,它应该被打包到 content/ contentFiles文件夹中。所以你应该删除<PackagePath>lib\$(TargetFramework)</PackagePath>第二个脚本中的行。

<Content Include="libmediainfo.so">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <PackageCopyToOutput>true</PackageCopyToOutput>
  <pack>true</pack>
</Content>

这足以libmediainfo.so打包到 content/contentFiles 文件夹中。如果你的主项目使用这个包,构建它,你会libmediainfo.so在它的bin文件夹中看到。(PackageCopyToOutput就是你要找的东西!)


推荐阅读