gpt4 book ai didi

c# - 对同一解决方案内组件的 PackageReference 或 ProjectReference?

转载 作者:行者123 更新时间:2023-12-02 07:52:01 28 4
gpt4 key购买 nike

让我们考虑一下这样的场景:我们有两个 .NET Standard 项目,我们想要为其公开并创建 NuGet 包:

图书馆解决方案

类库1 (CL1)

∟类库2(CL2)

值得一提的是,CL1 有一个对 CL2 的项目引用。

NuGet 的文档指出,理想情况下我们应该使用一个程序集生成一个包,因此我们为每个程序集创建一个 NuGet 包。

当我们需要确定在 LibrarySolution 范围内 CL1 中需要哪个版本的 CL2 时,就会出现问题,因为我们有直接的项目引用。

我想到了以下两种方法:

  1. 在解决方案中维护项目引用,这意味着我们需要将包版本存储在 csproj 文件中、提交版本冲突等,以便版本约束和依赖项要求正确(我们目前处理版本控制)在 CI 管道中,当前版本存储在那里而不是代码中)。

  2. 将对 CL2 的依赖关系转换为 PackageReference。这样,CL1 将始终依赖于已发布的 CL2 版本。然而,这样做意味着要经历围绕发布和更新 NuGet 包的所有工作(批准 PR、合并、CI 等),这可能非常耗时。

我认为选项1更好,但仍然感觉有点手动。有解决这个问题的最佳方法吗?我不想使用包来引用同一解决方案中的项目,因为这感觉是不必要的间接。

最佳答案

首先,您使用ProjectReference正确地做事。同一解决方案中的两个项目没有理由知道对方包的存在。现在,由于您在同一解决方案中拥有 CL1 和 CL2,我猜 CL1 需要最新版本的 CL2。

考虑到前面的内容,您可以通过添加以下内容来生成构建包 <GeneratePackageOnBuild>true</GeneratePackageOnBuild>标记,MSBuild 会将其更改为对包中最新版本的 NuGet 依赖项。

关于c# - 对同一解决方案内组件的 PackageReference 或 ProjectReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55922035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com