【问题标题】:Block NuGet package阻止 NuGet 包
【发布时间】:2018-10-09 07:54:26
【问题描述】:

System.Net.Http package hell 最后recovering 之后,我们想完全阻止这个包。

我正在寻找一种阻止软件包安装的方法,因此不是阻止或锁定版本而是整个软件包(由于依赖项或开发人员错误)。该块应该在应用程序的解决方案文件夹中,以便每个开发人员在从 SVN 更新后都会拥有该块。

我查看了 NuGet.config 和 .nuspec 文档,但找不到这样的功能。我的 Google-fu 也没有产生任何结果。所以我想知道这里是否有人知道是否以及如何完成。

我开了一个GitHub issue

【问题讨论】:

  • 由于很多包都依赖它,你想完全跳过 .NET Standard 和 .NET Core 吗?
  • 对我个人感觉有点反应过度。
  • 是的,我们只在 .NET Framework 上开发,所以不需要混合。其次,我们希望在部署到生产环境时避免错误,因为本地机器上的编译工作正常。第三,绑定重定向是万恶之源,只能作为最后的手段。
  • 您不能阻止包裹。 Nuget 不包含此功能。
  • @Patrick 这并没有反应过度,这个烂摊子也对我打击很大。有一些特定的包版本在 .NET Framework 4.6-4.7 上静默引入 .NET Standard,这会在安装它们的应用程序中导致冲突或错误的绑定重定向。

标签: c# visual-studio nuget


【解决方案1】:

我也许可以提供一个解决方法。我们想要一个类似的东西(防止引用 WinForms 依赖项)并添加了一个单元测试来检查是否引用了特定的程序集:

private static readonly IEnumerable<string> BlockedAssemblies = new List<string>
{   
    "System.Net.Http"
};

[Test]
public void SpecificAssembliesAreNotReferenced()
{
    var asm = Assembly.Load("Your.Assembly.File");

    var refs = asm.GetReferencedAssemblies();
    foreach(var a in refs)
    {
        Assert.False(BlockedAssemblies.Contains (a.Name), $"{a.Name} must not be referenced.");
    }
}

它并不完美,实际上并没有阻止下载包,但它可以防止意外引用和使用程序集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多