在构建时生成 Nuget 包不包含所有依赖项

2023-12-20

我的解决方案的树如下所示:

项目A

  • 引用 Nuget 包“Some Package”

项目B

  • 参考文献 项目 A

构建时,项目 B 生成一个包,我们称之为PackageB

在 ProjectB.csproj 中我使用了以下内容:

   <ProjectReference Include="ProjectA.csproj">
        <PrivateAssets>All</PrivateAssets>
    </ProjectReference>

Meaning PackageB, 此外ProjecdtB.dll,包括ProjectA.dll

但是它不包括“某些包”,所以当我启动引用的客户端时PackageB,我收到运行时错误,抱怨“某些包”中包含的 dll 丢失。

如何确保“某些包”被添加为依赖项PackageB。我想在 csproj 中执行此操作,而不依赖 nuspec 文件。这可能吗 ?

[EDIT]为了将 ProjectS 包含在包中,我还需要提及我正在使用Teronis.MSBuild.Packaging.ProjectBuildInPackage https://www.nuget.org/packages/Teronis.MSBuild.Packaging.ProjectBuildInPackage/.


感谢您使用我的包裹。

我们首先假设以下情况:

<!-- Project A -->
<ItemGroup>
  <PackageReference Include="SomePackage" Version="*" />
</ItemGroup>

<!-- Project B -->
<ItemGroup>
  <ProjectReference Include="ProjectA" PrivateAssets="all">
  <!--<PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />-->
</ItemGroup>

您告诉 NuGet 您不希望项目 A 被视为 NuGet 依赖项。这是隐含的,你无法控制。缺点是项目 A 的程序集(但不是项目 A 的包的程序集)不存在于项目 B 的包中。

通过删除PrivateAssets="all"您禁用 NuGet 的隐式行为,项目 A 将被选取为 NuGet 依赖项和每个非依赖项包(也称为传递包)。

现在让我们假设一下:

<!-- Project A -->
<ItemGroup>
  <PackageReference Include="SomePackage" Version="*" />
</ItemGroup>

<!-- Project B -->
<ItemGroup>
  <ProjectReference Include="ProjectA" PrivateAssets="all">
  <PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />
</ItemGroup>

通过安装我的包,我有助于 NuGet 的隐式行为:不将项目 A 作为 NuGet 依赖项复制到项目 A 生成的直接程序集到项目 B 的 bin 文件夹中。这样做有以下缺点:

由于我的包的隐式行为和使用,您在项目 B 中拥有项目 A 的程序集,这些程序集需要您在项目 A 中引用的包(在您的示例中为“某些包”)提供的程序集。因此,解决方法是将项目 A 中的包显式添加到项目 B 中,如下所示:

<!-- Project A -->
<ItemGroup>
  <PackageReference Include="SomePackage" Version="*" />
</ItemGroup>

<!-- Project B -->
<ItemGroup>
  <ProjectReference Include="ProjectA" PrivateAssets="all">
  <PackageReference Include="Teronis.MSBuild.Packaging.ProjectBuildInPackage" Version="0.1.7" />
  <!-- Use the SAME version like in Project A. -->
  <PackageReference Include="SomePackage" Version="*" />
</ItemGroup>

这应该可以解决你的问题。当它不起作用时,请提供反馈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在构建时生成 Nuget 包不包含所有依赖项 的相关文章

随机推荐

  • 如何从配置文件设置 python 的登录级别

    我正在尝试为我的 python 代码设置记录器 我想从配置文件设置日志的级别 但我无法做到 下面给出了代码 如果您注意到在下面给出的代码中可以看到logger setLevel logging INFO 我不想直接提及作为硬编码值日志记录
  • 具有 64 位 Outlook 的 32 位 MAPI 应用程序

    我们的应用程序的 32 位版本无法使用以下方式发送电子邮件MAPISendMail安装了 64 位 Outlook 它返回一个错误 0x80004005 除了它似乎是一个 MAPI 初始化错误这一事实之外 我找不到任何关于该错误的信息 根据
  • Android:ACTION_UP 和 ACTION_POINTER_UP 之间的区别

    仅从 android 文档来看 我真的不明白两者之间的区别ACTION UP and ACTION POINTER UP http developer android com reference android view MotionEve
  • Meteor 路由错误:路径没有路由:/

    我已将 Meteor 更新为 Meteor 1 3 2 4 并面对这个问题 我还更新了所有软件包的最新版本 错误 路径没有路由 我在两种环境中都尝试了 meteor and 流星跑 制作 控制台中将显示相同的错误 我已经安装了以下软件包 a
  • 从 Ktor 应用程序发送电子邮件

    我目前正在使用 Ktor Netty 引擎创建我的应用程序 我在文档中搜索了当用户向我的服务器发送请求时处理发送电子邮件的任何功能 但什么也没找到 post api v1 auth TODO send email when request
  • jsf导航问题

    我有一个带有 查看用户 页面的 JSF2 项目 该页面从会话 bean 读取当前选定的用户 userHandler selectedUser 该页面旨在通过应用程序中的链接导航来访问 但是 如果用户尝试通过此 URL 直接访问 查看用户 页
  • Bootstrap 3页打印手机版

    当我们从基于 Bootstrap 3 的网站打印页面时 它们会在某些显示移动版本的浏览器上打印 我用谷歌搜索试图找到一个好的解决方案 但没有真正找到任何有效的解决方案 在屏幕上使用相同的 CSS 并将 打印隐藏 类添加到特定的 DIV 中
  • 如果我在 WRITE_EXTERNAL_STORAGE 权限中设置 maxSdkVersion,为什么我的地图应用程序会崩溃?

    我已按照中的说明设置了地图这个链接 https developers google com maps documentation android start getting the google maps android api v2 并设
  • 为什么下标运算符 C++ 经常成对出现?

    C FAQ http www parashift com c faq multidim arrays3 html正在定义一个模板容器Matrix以避免棘手new delete代码 教程说下标运算符通常成对出现 为什么会这样呢 T opera
  • 安装后无法导入lightgbm

    我的操作系统是 macOS Sierra 10 12 5 我使用的是 Anaconda 和 python 2 7 安装后 当我尝试时 将 lightgbm 导入为 lgb 我收到以下消息 OSError Traceback most rec
  • 重复JS函数

    我试图让这个函数在它的周期结束时重复 我尝试将函数分配给变量并在回调中调用该变量 但失败了 我尝试将这个函数包装在setInterval功能 仍然无法使其工作 如何让这个函数运行无限循环并重复自身 span text change type
  • 将指针与负值进行比较

    我可以将指向结构的指针强制转换为有符号值以返回不同类型的错误吗 C 标准是否允许这样做或者是未定义的行为 typedef enum lError l OK 0 l ERROR 1 l ABORT 2 l HALT 3 L STATUS ty
  • 如何在javascript中从数组中删除重复的对象?

    在我的代码中 我创建了一个名为 array1 的数组 在这个数组中我列出了多个对象 我想过滤掉 array1 对象值作为唯一 并且需要将 id 与其各自的值分组 我在这里添加了我的代码 Array1 var array1 value A i
  • 如何将本地 html 文件加载到 Jsoup 中?

    我似乎无法使用 Jsoup 库加载本地 html 文件 或者至少它似乎没有意识到这一点 我在本地文件中硬编码了确切的 html 作为 var html 当我切换到该文件而不是文件输入时 代码完美运行 但两次都会读取该文件 import ja
  • 向后读取文件(最后一行在前)

    文件看起来像这样 abcd efgh ijkl 我想使用读取文件C这样它首先读取最后一行 ijkl efgh abcd 我似乎找不到不使用的解决方案array用于存储 请帮忙 edit0 感谢所有的答案 只是为了让您知道 我是创建此文件的人
  • 如何使用SQL Server的OUTPUT子句进行更新

    DECLARE t2 AS TABLE id INT INSERT INTO dbo EntityMaster EntityType OUTPUT INSERTED EntityId INTO t2 SELECT G FROM tmp tm
  • 无法在 Winforms 中使用 C# 使用 datagridview 添加新行

    我想做一个简单的数据输入应用程序 所以我做了以下事情 创建了一个新的 Windows 窗体应用程序 添加了 DataGridView 添加了一个新的数据源 SQL Express 数据库 有一个包含 3 列的表 id name number
  • Mac/Safari 上的字体粗细变轻

    On my last website the text is perfect naturally on chrome and firefox without touching font smoothing or anything else
  • 使用音轨从线程更新用户界面

    我有一个应用程序 可以使用audiorecord 和audiotrack 来录制音频来播放 我在用户界面中有一个进度条 需要随着曲目的播放而增加 audiotrack api 表示读取和写入方法是阻塞的 这意味着用户界面被冻结直到写入完成
  • 在构建时生成 Nuget 包不包含所有依赖项

    我的解决方案的树如下所示 项目A 引用 Nuget 包 Some Package 项目B 参考文献 项目 A 构建时 项目 B 生成一个包 我们称之为PackageB 在 ProjectB csproj 中我使用了以下内容