代码之家  ›  专栏  ›  技术社区  ›  JeffreyABecker

运行时azure应用服务中缺少system.private.servicemodel

  •  1
  • JeffreyABecker  · 技术社区  · 6 年前

    我正在尝试将ASP.NET Core 2.1 webapp部署到azure应用程序服务。webapp使用wcf服务,因此包含对wcf的引用。在编译和开发机器上一切都运行良好。但是,当部署到azure应用服务时,webapp无法启动。它抛出了一个错误

    Could not load file or assembly 'System.Private.ServiceModel, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

    我已经尝试发布独立的和依赖于框架的应用程序。有什么特别的方法我需要包括或参考这个包吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   HgCoder    6 年前

    在尝试在asp.net core 2.1应用程序中使用soapcore nuget包之后,我遇到了一个类似的解决方案。在windows 10上本地运行良好,但在我发布到azure后给出了与原始海报完全相同的堆栈跟踪。以下github问题帮助我理解了问题:

    https://github.com/dotnet/wcf/issues/2349

    对我来说,soapcore指的是 System.ServiceModel.Http 4.4.0 ,它依赖于 System.Private.ServiceModel 4.4.0 . 如果下载nuget包并打开 System.Private.ServiceModel 4.4.0版 观察“runtimes”子文件夹,您将看到它只列出“win7”和“unix”。azure似乎在寻找运行时“win-x86”或“win-x64”,上面的github问题解释了这些rid是如何不包含在“win7”rid中的。看到问题解决了,我下载了 System.Private.ServiceModel 4.5.0 检查“runtimes”子文件夹并查看它是否已从“win7”更改为“win”,就像github问题中提到的那样。

    为了解决我的问题,我直接为 System.ServiceModel.Http 4.5.0 我的项目。这包括对 System.Private.ServiceModel 4.5.0版 而且azure会正确地识别“win”运行时,以确保在发布时将必要的dll包含在我的应用程序中。

    推荐文章