对同一解决方案/git 存储库中的项目的 PackageReference

2024-05-11

目前我正在尝试设置一个带有实现类库和抽象项目的解决方案。我想在 nuget.org 上找到这两个包。

通常,当您只使用 ProjectReferences 时,您只需指向 csproj:

随机抽象:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Description>Abstractions for the Randomizer</Description>
    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
    <Company>MyCompany</Company>
    <Authors>Pieterjan De Clippel</Authors>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
  </ItemGroup>

</Project>

Random

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Random.Abstractions\Random.Abstractions.csproj" />
  </ItemGroup>

</Project>

但是当然,当您构建 nuget 包时,您不希望随机抽象.dll位于Randomnuget 包,但是Random包依赖于随机抽象包裹。但由于该包尚不存在,因此您还无法构建它。

微软能够解决这个问题像这样 https://github.com/dotnet/aspnetcore/blob/main/src/DataProtection/DataProtection/src/Microsoft.AspNetCore.DataProtection.csproj#L24:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
  </PropertyGroup>

  <ItemGroup>
    ...
  </ItemGroup>

  <ItemGroup>
    ...
    <Reference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
  </ItemGroup>

</Project>

所以这既不是ProjectReference nor a PackageReference,这就是为什么他们能够:

  1. 在本地构建并测试解决方案(因此他们将充当ProjectReferences)
  2. 将代码推送到 GitHub 并让 GitHub Actions 创建并发布包的新版本,同时它们相互依赖(因此它们将充当PackageReferences)

我尝试在我的解决方案中执行相同的操作,但是包含具体实现的项目无法找到抽象项目:

MyCompany.Random.Abstractions.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Description>Abstractions for the Randomizer</Description>
    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
    <Company>MyCompany</Company>
    <Authors>John Wick</Authors>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
  </ItemGroup>

</Project>

MyCompany.Random.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="MyCompany.Random.Abstractions" />
  </ItemGroup>

</Project>

所以没有ProjectReference(我们不希望dll位于这个nuget包中),没有PackageReference(该包尚未发布),而只是Reference。 但不知何故,我仍然收到无法找到抽象程序集的错误:

我检查了 NuGet.config,但里面没有什么特别的。

我怎样才能使用Reference在基于 dotnet 的项目中添加标签,以便在本地构建/测试时引用代码并在 CI 管道中构建/推送时引用新包?

参考Microsoft.NET.Sdk文档 https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview

Update:

@pinkfloydx33,你是对的。我只能在 nupkg 中看到一个程序集/dll:

更新2:

我添加了Microsoft.SourceLink.GitHub打包到我的项目中,下载/解压我的包的新版本后,我可以看到以下内容nuspec:

Where 77b181a24a83e46b4c80376f65bb305bedba1a64是提交 ID。

谢谢你的提示。


使用以下内容:

Condition="'$(配置)'=='DEBUG'" in 项目参考 and Condition="'$(配置)'!='DEBUG'" with 封装参考

这对我来说效果很好,并且取决于配置风格。

Example:

 <ProjectReference Include="..\Company.Project1\Company.Project1.csproj" Condition="'$(Configuration)'=='DEBUG'" />
 <PackageReference Include="Company.Project1" Version="1.*"  Condition="'$(Configuration)'!='DEBUG'"/>

 <ProjectReference Include="..\Company.Project2\Company.Project2.csproj" Condition="'$(Configuration)'=='DEBUG'" />
 <PackageReference Include="Company.Project2" Version="1.*"  Condition="'$(Configuration)'!='DEBUG'"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对同一解决方案/git 存储库中的项目的 PackageReference 的相关文章

随机推荐

  • Xcode 11 beta 4 错误:命令 CompileSwiftSources 失败,退出代码非零

    我已经下载了最新的 Xcode beta 4 当我构建时 我的 3 个 pod 遇到了同样的错误 Command CompileSwiftSources failed with a nonzero exit code
  • Xcode 4:获取请求模板变量?

    在 Xcode 3 X 中 您应该右键单击获取请求模板的谓词编辑器中的空白来指定变量输入而不是硬编码谓词 这是 XCode 4 中的哪里 我已经按住了选项 右键单击 选项单击等 但无法弄清楚 我认为X4不再有变量了 相反 我认为您必须选择一
  • env: python: 使用 Xcode 构建应用程序时没有这样的文件或目录

    当我在 Xcode 在 MacOS 12 3 上 中构建 运行 存档我的应 用程序时 遇到此错误 env python No such file or directory Command Ld failed with a nonzero e
  • Git:当文件位于嵌套 git 存储库中时强制“添加”

    我想添加一个包含在父存储库中的嵌套 git 存储库中的文件 我正在开发一个在我的项目中使用的库 然而git add nested repo myfile不做任何事情 我可以尝试重命名 git文件在进行提交时 但是当我重命名回时 我担心会出现
  • 未找到 ADB screenrecord 命令

    我无法奔跑adb shell screenrecord sdcard my mp4 我尝试运行此命令的设备规格 Honor 5C 安卓6 0 每当我运行 screenrecord 命令时 它都会显示未找到命令 D adb gt adb sh
  • Android 从图库中选择图像显示内存错误

    我正在编写一个代码示例 我必须从图库中选择一个图像 该代码正在运行 但是在从图库中选择图像后 我得到了内存不足错误 in my 活动结果时 我可以获得小图像 但大图像会产生问题 这是我的代码 try Uri selectedImageUri
  • Windows 中内存分配的限制+我计算得是否正确?

    我正在编写一个需要大量内存的程序 大型图形分析 目前我的程序中有两个主要的数据结构 占用了大部分内存 这些都是 n n 类型的矩阵int 和长度为 n 的数组 类型Node 在本例中 节点是一个包含两个 int 的结构体 sizeof No
  • Maven Pom.xml 问题

    我正在尝试使用 maven 制作一个 spring mvc 项目 并在 pom xml 中出现以下错误 CoreException 无法计算构建计划 插件 org apache maven plugins maven compiler pl
  • R 中的输出,避免写“[1]”

    I use print从 R 中的函数输出 例如 print blah blah blah 这输出 1 blah blah blah 到控制台 我怎样才能避免 1 和引号 Use cat Your string type cat查看帮助页面
  • Glassfish 3 有两种配置

    我想在 Glassfish 3 1 中设置 JDBC 领域 我正在关注这个博客http blog gamatam com 2009 11 jdbc realm setup with glassfish v3 html http blog g
  • ExtJS 4 用于选择所选值的组合框事件

    由于某种原因 我需要知道用户何时从组合框中选择了值 即使它已经被选择 仅当用户选择未选择的项目时 选择 事件才起作用 我在组合框或选择器的文档中没有看到任何类似 itemclick 的事件 有任何想法吗 ComboBox uses 绑定列表
  • 如何检查当前日期并移至下一个日期

    我遇到了一个我似乎无法理解的 python 问题 不确定是否需要使用 if 语句 但因为我是 python 新手 所以我实际上不确定如何编写这个小问题 事实上 这就是我遇到的问题 对于出发日历 我希望 python 能够执行以下操作 查看
  • 为什么这不会绘制图像?

    我想做的是 当我运行应用程序时 它会启动线程并且图像显示 3 秒 3000 毫秒 然后线程停止运行 图片路径正确 图片文件存在 线程本身运行 但是 图像似乎没有显示 可能出什么问题了 这是我的代码 package org main impo
  • 如何获取右侧数据框中不在左侧数据框中的数据

    我有两个数据帧 我正在尝试输出其中一个数据帧中的数据 而不是另一个数据帧中的数据 我可以使用第一个数据帧中的数据 但不能使用第二个数据帧中的数据 only new old merge new outer on Employee ID Ben
  • 如何在 PercentRelativeLayout 中使用layout_aspectRatio?

    我尝试在视图上实现 16 9 的纵横比PercentRelativeLayout https developer android com reference android support percent PercentRelativeLa
  • 澄清创建临时表的连接顺序

    我在 mysql 中有一个大型查询 涉及将多个表连接在一起 它太慢了 所以我做了 解释 发现它正在创建一个临时表 我怀疑它占用了大部分执行时间 我找到了一些相关资料 mysql 文档 http dev mysql com doc refma
  • Mailgun 内联图像,它是如何工作的?

    我正在使用 mailgun 并希望将图像添加到我的时事通讯中 现在我这样做了 mg gt sendMessage domain array from gt email protected cdn cgi l email protection
  • Android Activity 重新创建自身

    我的应用程序通常运行得很好 直到我在特定设备上遇到奇怪的问题 App中有2个活动 当我在 ActivityA 内启动 ActivityB 后 ActivityA 启动时没有问题 但是 当我通过按下硬件按钮或调用 finish 返回 Acti
  • keras 层教程和示例

    我正在尝试编码和学习不同的神经网络模型 我对输入维度有很多复杂性 我正在寻找一些教程 显示层的差异以及如何设置每个层的输入和输出 Keras 文档 https keras io layers core 向您展示所有input shape每层
  • 对同一解决方案/git 存储库中的项目的 PackageReference

    目前我正在尝试设置一个带有实现类库和抽象项目的解决方案 我想在 nuget org 上找到这两个包 通常 当您只使用 ProjectReferences 时 您只需指向 csproj 随机抽象