例如,我在项目A中使用了来自NuGet的库B:

引用:

<PackageReference Include="B" Version="1.0.0"/>

用途:

namespace A.Helpers
{
    public interface Helper
    {
         A.Models.Output DoStuff(B.Input input);
    }
}

并将其发布到NuGet.一段时间后,我注意到B使用了很多不同的不必要的依赖项,比如CD、…、ZZZ,所以我的NuGetA也会传递性地引用它们.

如果我引用它,则添加PrivateAssets标记:

<PackageReference Include="B" Version="1.0.0" PrivateAssets="All"/>

A的用户将失go 对类B.Input的访问权限

如何在不向最终用户传递不必要的依赖项CD、……ZZZ的情况下发布库A,但仍允许使用类B.Input

编辑:我想澄清的是,unnecessary在这里的意思是"我正在使用或运输的功能不需要".也就是说,我使用B中的矩阵和向量,但B也提供了处理图形和引用(如System.Drawing)的方法,我不愿进一步传递它

推荐答案

(将我轻率的 comments 转换为答案,因为the OP said it was actually good advice(笑,但足够公平))

说明:在包装作者行为不端时拆开NuGet包装封条

  1. 找到有问题的.nupkg程序包文件(通过从其源代码或从~/.nuget/packages/目录复制它).
    • 还要判断是否也有.snupkg.symbols.nupkg文件.
  2. 由于.nupkg只是一个重新标记的zip文件,因此可以将其内容解压缩到某个新目录中;您可以使用您最喜欢的PKZIP工具(例如7-Zip,PowerShell,WinZip,甚至explorer.exe的缓慢提取向导).
  3. 在解压缩内容的根目录中,找到{packageName}.nuspec文件.在记事本或your editor of choice中打开它.
  4. Edit the <metadata>, <dependencies> and <dependency> elements to your liking. Some tips:
    • 不要将MSBuild <PackageReference /><ProjectReference />与NuSpec <dependency>元素混为一谈--它们既相似又不同.

      • 例如,<dependency>include=""exclude="",而<PackageReference />IncludeAssets=""ExcludeAssets=""PrivateAssets="".
    • Consider adding the developmentDependency="true" attribute

    • 不要忘记将NuSpec <id>更改为与您正在修改的原始包完全不同(包名称不需要与任何程序集名称匹配,它完全是任意的).

      • <description>元素附加到<description>元素以记录您所做的更改也是很好的形式,这样其他人(以及future 的您)就不会被同一个包存储中紧挨着DodgyPackageNowLessDodgy.0.1.0-dev.nupkgDodgyPackage.1.0.0.nupkg所迷惑.
  5. 然后创建一个新的空.zip文件,将文件重新添加到其中,将其重命名为{yourNewPackageId}.{version}.nupkg并将其添加到包存储中.

Csharp相关问答推荐

在Dapper中使用IasyncEum重写GetAsyncEum方法

EF Core在请求列表时忽略列,但在按ID获取时包含

通过EFCore上传大量数据.

不仅仅是一个简单的自定义按钮

自动映射程序在GroupBy之后使用项目

.NET 6控制台应用程序,RabbitMQ消费不工作时,它的程序文件中的S

ASP.NET核心REST API返回一个非常大的数字

使用泛型可空类实现接口

C#DateTime.ParseExact不使用特定日期

在IAsyncEnumerable上先调用,然后跳过(1)可以吗?

在字符串C#之前获取数字

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

是否可以从IQueryable T中获取一个IdentyEntry T>

序列化过程中的死循环

FakeItEasy自动嘲弄内容

如何使用.NET 8.0中新的CompositeFormat类?

如何在Cake脚本中设置MSBuild.exe的绝对路径

无效的Zip文件-Zip存档

为什么Visual Studio 2022建议IDE0251将我的方法设置为只读?

无法对包含字符串的列进行排序.请与实体框架联接