我有一个 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>
如果 Web 服务在本地启动,则仅 .dll 被复制到“bin\Debug et8.0"
为什么会这样。这样只能复制.dll 文件吗?
我想我刚刚解决了这个问题。我将“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>