我们使用 IBM 的 DB2 库从 C# 访问 DB2https://www.nuget.org/packages/IBM.Data.DB2.Core/ https://www.nuget.org/packages/IBM.Data.DB2.Core/
我们希望将 IBM 的库包装在我们自己的库中,为应用程序开发人员添加 DB2 相关功能。
问题是 IBM 的库基于包含在其包中的本机 dll。但是,当仅通过我们自己的 DB2 包装器库间接引用 IBM 库时,这些本机 dll 不会复制到构建输出文件夹
我怀疑我需要将本机 dll 包含在我们自己的库中。只是我不知道该怎么做。
我们为包装器库创建的 nuget 包是从 csproj 文件创建的
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.0</Version>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IBM.Data.DB2.Core" Version="1.3.0.100" />
</ItemGroup>
</Project>
情况很复杂。 NuGet 有两种使用包的方法,并且这两种方法的工作方式有些不同。原来的方式是与packages.config
(PC),新方法是PackageReference
(PR).
PC 上的 NuGet 没有运行时的概念,因此它们经常实现它,快速查看一下包,情况似乎就是这样,包作者将 MSBuild 属性和/或目标文件捆绑在包中,并且这些目标修改构建以复制构建上的本机文件。使用 PC 的项目,当安装包时,所有依赖项也会安装,因此所有包都是项目的直接依赖项,包中的任何构建目标都会导入到项目中。
另一方面,使用 NuGet 和 PR 的项目只能引用它们的直接依赖项,但包的依赖项是可传递的。 NuGet 仅告诉 MSBuild 从直接依赖项导入构建目标,而不是传递依赖项。这解释了您所看到的行为。
在NuGet 5.0(与Visual Studio 2019一起发布,我不记得.NET Core SDK的哪个版本)中,我们添加了一个buildTransitive
将从传递包中提取构建道具/目标的功能。但是,它需要包作者重新创作他们的包才能使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)