为什么依赖库中的本机 dll 不包含在构建输出中?

2024-05-08

我们使用 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(使用前将#替换为@)

为什么依赖库中的本机 dll 不包含在构建输出中? 的相关文章

  • 当文件已存在时无法创建该文件

    我正在使用 Winforms 并且尝试将文件从一个位置复制到另一个位置 如果同名文件已经存在 我想覆盖它 但我收到类似 当文件已存在时无法创建文件 的错误 我想覆盖该文件 我应该怎么办 我试过File copy代替File move 但我遇
  • Roslyn 将内容嵌入到程序集中

    是否可以嵌入content使用 roslyn 进入程序集 嵌入资源效果很好 但不知道如何添加内容 我添加这样的资源 foreach string file in Directory GetFiles inputPath Where item
  • Convert.ToInt32(string) 和 Int32.Parse 之间的区别? [复制]

    这个问题在这里已经有答案了 精确重复 Net 解析与转换 https stackoverflow com questions 18465 net parse verses convert谁能帮我 Convert ToInt32 string
  • RavenDB 和 SignalR Nuget 包依赖项冲突

    基本冲突 SignalR 希望 Newtonsoft Json 版本为 4 0 7 或更高版本 而 RavenDB 希望版本等于 4 0 5 这显然意味着它们不能并排安装 因此 除了从其中之一下载源代码并在本地计算出依赖项 然后必须签入从中
  • 如何检索 ComboBox 选定的值作为枚举类型?

    这是我的Enum code public enum EmployeeType Manager Worker 我将初始化ComboBox值 而表单将自身初始化为 combobox1 ItemsSource Enum GetValues typ
  • 您是否必须在 VB.NET 中显式创建表单实例? [复制]

    这个问题在这里已经有答案了 如果一个项目包含Form类 形式可以通过以下方式显示 Form1 Show 或者是否需要首先创建表单的实例 Dim frm As New Form1 frm Show 正如所建议的 使用表单名称使用默认实例 而第
  • Azure Devops - Nuget 包中从 .NET Core 3.1 迁移到 .NET 5 时出现兼容性问题

    我有一个 NET Core 解决方案 该解决方案在 Azure Devops 上使用 Pipeline 使用 NET Core 3 1 运行良好 管道上的一切都运行良好 从 NET Core 3 1 迁移到 NET 5 0 后 我开始在运行
  • 如何获取 ASP.NET MVC 中当前的虚拟路径?

    如何从 ASP NET MVC 视图中获取当前路径 URL 如果没有办法将其获取到视图中 那么如何将其获取到控制器中以便将其传递到视图呢 EDIT 我不需要 url 的协议和主机部分 这将为您返回视图中的 url
  • 使用 apachesoap:使用 .net 在 Web 服务中映射复杂数据类型

    我有一个用 Coldfusion 编程的 Web 服务 我试图使用 c net 来使用它 特定的 Web 服务返回一个 Coldfusion 结构 具有键和值的项目的集合 该结构由 Web 服务公开为 apachesoap Map 类型的复
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 如何使用 Linq 将实体表与交叉引用表连接起来

    首先我要说的是 我对 Linq 比较陌生 但我似乎很快就掌握了其中的大部分内容 但这个问题却难倒了我 我找了又找都没有结果 我使用代码优先并创建了 2 个模型 项目 和 关键字 他们之间存在多对多的关系 我的实体模型如下所示 public
  • ASP.NET 3.5 更新至 4.0 -> Sys.WebForms.PageRequestManager 未定义

    正如标题所示 我最近将包含 UpdatePanels 和类似 AJAX 技术的 ASP NET 3 5 应用程序更新为 ASP NET 4 0 不幸的是 UpdatePanel 不再起作用 整页回发使一切都变得糟糕 Web config 文
  • 如何使用 .net 2.0 中的 WebBrowser 控件检查 ajax 更新?

    我有一个网页正在使用 WebBrowser 控件在 winform 应用程序中显示 我需要在网页中的 HTML 发生变化时执行一个事件 但是 我找不到通过 Ajax 更新页面时触发的事件 DocumentComplete FileDownl
  • 实现“LazyProperty”类 - 这是一个好主意吗?

    我经常发现自己编写的属性是惰性评估的 就像是 if backingField null backingField SomeOperation return backingField 代码不多 但如果您有很多属性 它确实会重复很多次 我正在考
  • 从 DataGridViewSelectedRowCollection 复制列详细信息

    我有一个 DataGridView 它绑定到一个由设计时未知的 SQL 查询返回的 DataSet 好吧 我知道查询是什么 我只是不知道用户选择了哪一个 我允许用户从表中选择一组行并单击 确定 按钮 然后我想将这些行复制到新的 DataGr
  • 了解 C# 中的协变和逆变接口

    我在一本有关 C 的教科书中遇到过这些内容 但我很难理解它们 可能是由于缺乏上下文 对于它们是什么以及它们有什么用处 是否有一个很好的简洁解释 编辑以澄清 协变接口 interface IBibble
  • 实体框架中的 DbSet [重复]

    这个问题在这里已经有答案了 我在实体框架中有以下代码 using var dbc new TestDbContext var data from a in dbc tableList select new a id ToList 当我调试代
  • DBNull 怎么会不等于 DBNull

    我有以下代码行 if DBNull Value Equals o o null where o is object o in row ItemArray我不断收到错误 gt Xml type List of xdt untypedAtomi
  • 从 Microsoft Chart Control 单击数据标记获取鼠标单击事件

    我的应用程序中有一个 net 4 0 点图 我想捕获鼠标在数据标记上的点击 当用户单击特定点时 我想转到绑定表中数据来自的行 此功能是否内置于 net 图表控件中 编辑 我发现我可能实际上想要光标位置值 而不是要求用户单击特定的数据点 一旦
  • SecurityAction.RequestMinimum 在 .Net 4.0 中已过时

    最近 我们的 Net 客户端库正在升级以针对 Net 4 0 进行编译 将目标框架更改为4 0后 应用程序出现一些编译错误 In AssemblyInfo cs assembly SecurityPermission SecurityAct

随机推荐