【问题标题】:Private nuget reference break .NET Core 2 webapp at runtime私有 nuget 参考在运行时中断 .NET Core 2 webapp
【发布时间】:2021-11-23 09:55:56
【问题描述】:

情况是这样的。

我有 2 个在 .NET 标准 2.0 中编译的简单 dll(出于兼容性原因)。 第一个(我们称之为 A)除了 NETStandard.Library (2.0.3) 之外没有外部引用。第二个(我们称之为 B)引用 Microsoft.Extensions.Loggin.Abstractions (5.0.0)、Newtonsoft.Json (13.0.1),当然还有 NETStandard.Library (2.0.3)。编译和运行(本地单元测试)都没有错误。

由于我需要通过多个项目共享它们,因此我使用的是私有 GitHub 包存储库;我可以从 Visual Studio 中的 NuGet 包管理器中获取它们。 NuGets 创建和部署是通过 GitHub 操作完成的。

目前在 .NET Core 3.1 REST 项目中使用这两个 dll,没有任何问题。

当我尝试在 .NET Core 2.2 REST 项目中使用它们时,问题就开始了:虽然本地一切都很好(调试),但在发布和部署之后,我发现 dll B 以某种方式破坏了整个应用程序。

应用程序启动,但对 REST 服务的每个请求都没有收到任何响应(我认为它永远不会到达端点,说实话)。文本文件和事件查看器中没有来自应用程序或 IIS 的日志/错误。

我发现这与代码无关,因为在不使用任何方法的情况下引用 dll B 足以破坏整个事情。

A dll 完全没有问题。

这是我尝试过的(不完全按照这个顺序):

  • 删除了所有引用并注释了 B 中的每一行代码 -> 仍然破坏了应用程序(这让我意识到这不是代码或引用问题)
  • 从另一个项目中引用它:这次是 WebApp .NET Core 2.0 -> 仍然破坏应用程序
  • 从 .NET Core 2.2 中的一个全新空项目(Visual Studio 用作启动模板的 Weather REST 服务)中引用它 -> 完全没有问题
  • 向 Weather REST 服务添加了其他应用程序具有的所有依赖项(以发现任何不兼容性)-> 仍在开发 Weather 项目
  • 手动创建并推送 NuGet 包 -> 仍然破坏应用程序
  • 部署在两台不同的机器上(一台内部机器和一台 AWS) -> 两台机器上的应用程序仍然崩溃
  • 将其引用为本地程序集(而不是来自 NuGet)-> 它有效!

因此,即使是对空 dll 的 NuGet 引用也会破坏应用程序,而本地程序集则不会。这不是框架/环境问题,因为新的 .NET Core 2.2 项目和另一个 .NET Core 3.1 项目运行良好(在同一台机器上)。 这不是 .NET Standard 编译问题,因为 A dll 遵循完全相同的部署方法,并且在任何地方都可以使用。 没有抛出错误。 调试时一切正常。

我很绝望。有什么建议吗?

谢谢

【问题讨论】:

    标签: c# .net nuget .net-standard-2.0 github-package-registry


    【解决方案1】:

    我终于想通了,即使有些事情还不清楚。

    我在 .NETCore2.2 中的项目使用具有特定版本(2.2,根据框架)的 AspNetCore.All,并包含一些 Microsoft.Extensions.Logging dll。

    我的 B dll 引用 Microsoft.Extensions.Logging.Abstractions 5.0:将 B 作为 NuGet 下载会使包管理器解析引用,所以基本上我在我的应用程序中使用 v5.0,而应用程序正在寻找 v2 .2 在框架中(可能在 GAC 中,这可以解释为什么具有相同引用的全新应用程序运行良好)。

    所以我通过使用解决了

    AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => 
    {
      //Log everything here
    }
    

    我发现它抛出了一个关于一个类的错误我根本没有使用;该类存在于 Logging.Abstractions 5.0 但不在 2.2 中。

    由于我不需要 5.0 的任何功能,我将其降级为 2.0,现在它就像一个魅力。

    仍然不知道为什么事件查看器中没有记录异常。

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2017-04-24
      相关资源
      最近更新 更多