我正在尝试将asp.net core 2.1 webapp部署到azure app服务。 webapp使用wcf服务,因此包含对wcf的引用。在编译和开发人员机器上一切运行良好。但是,当它部署到azure app服务时,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.
我尝试发布自包含和框架相关的应用程序。我需要一些特殊的方式来包含或引用这个包吗?
答案 0 :(得分:1)
在尝试在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
的nupkg文件并观察“运行时”子文件夹,您会看到它只列出“win7”和“unix”。 Azure似乎正在寻找运行时“win-x86”或“win-x64”,上面的GitHub问题解释了这些RID是如何被“win7”RID包含的。看到问题已经关闭,我下载了System.Private.ServiceModel 4.5.0
以检查“运行时”子文件夹,看到它已从“win7”更改为“win”,就像GitHub问题中提到的那样。
为了解决我的问题,我直接为我的项目添加了System.ServiceModel.Http 4.5.0
的依赖项。这包括System.Private.ServiceModel 4.5.0
的较新依赖项,Azure会正确识别“win”运行时,以确保在发布时我的应用程序中包含必要的DLL。
答案 1 :(得分:0)
我在Core 2.0 API中有相同的问题。 我打开CS项目文件并进行了下一个更改
<PackageReference Include="System.ServiceModel.Http" Version="4.4.*" />
到
<PackageReference Include="System.ServiceModel.Http" Version="4.5.*" />
将版本从4.4更改为4.5,项目将重新加载正确的程序集。