【发布时间】:2020-12-17 12:42:35
【问题描述】:
几周前我遇到了类似的问题:
我可以在本地从 Visual Studio 2019 运行它,没有任何问题,但是每当我在通过 Azure DevOps 部署后尝试运行它时,我都会收到以下错误:
Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
at System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)
at System.Reflection.RuntimeMethodInfo.get_ReturnType()
at Microsoft.AspNetCore.Hosting.StartupLoader.FindMethod(Type startupType, String methodName, String environmentName, Type returnType, Boolean required)
at Microsoft.AspNetCore.Hosting.StartupLoader.HasConfigureServicesIServiceProviderDelegate(Type startupType, String environmentName)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass12_0.<UseStartup>b__0(HostBuilderContext context, IServiceCollection services)
at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at KindRegards.Web.Api.Program.Main(String[] args) in /home/vsts/work/1/s/src/Api/Program.cs:line 10
我不完全理解所有这些是如何联系在一起的,所以我尝试添加:
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" />
但这没有用。我有其他使用 3.1.8 版的“Microsoft.Extension”包,所以我尝试通过添加来匹配它们:
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.8" />
但是后来我无法在本地运行它,我得到了这个错误:
NU1605 Detected package downgrade: Microsoft.Extensions.DependencyInjection.Abstractions from 5.0.0 to 3.1.8. Reference the package directly from the project to select a different version.
KindRegards.Web.Api -> KindRegards.Plugins.PaymentProcessors.GreenMoney -> Microsoft.Extensions.Http 5.0.0 -> Microsoft.Extensions.DependencyInjection.Abstractions (>= 5.0.0)
KindRegards.Web.Api -> Microsoft.Extensions.DependencyInjection.Abstractions (>= 3.1.8) Web.Api Z:\Projects\KindRegards\src\Api\Web.Api.csproj 1
我什至不知道如何开始深入研究。任何帮助将不胜感激。
【问题讨论】:
-
您的部署模式设置为什么?当我切换到 .NET 5.0 并升级我们解决方案中的所有 nuget 包时,我不得不将部署模式设置更改为“框架依赖”而不是“自包含”。我不得不手动擦除服务器目录,然后重新部署更改。可以检查您的部署模式吗?
-
我对使用 DevOps + Azure 比较陌生,所以我不确定在哪里可以找到它。
-
在我的本地 Visual Studio 中通过 Publish 部署它时遇到问题。不管出于什么原因,DevOps 没有更新服务器上的 .dll 版本,所以我手动将其全部删除。然后我从本地发布并注意到它复制了我什至不使用的各种东西到我的服务器。我注意到发布设置是“selfcontained=true”,它应该是假的,否则它会将许多错误的 .dll 复制到目的地。值得检查一下您的内容是如何发布的,即使是来自 DevOps。这在 .NET 5.0 迁移中对我们不利。在本地查找 .pubxml 文件或在 DevOps 上发布任务。
-
当“selfcontained=true”从我的本地 VS 发布时,它复制了数百个尚未使用 .NET 5.0 的 .NET Framework .dll。一旦我告诉它部署模式“依赖于框架”而不是“自包含”,我的 .NET 5.0 应用程序就开始工作并真正使用带有 .NET 5.0 的 NuGet 包(这让我们愚弄了几天)。在检查了这些更改之后,即使从 DevOps 的角度来看,它似乎仍然有效。我也从来不需要处理部署模式,但显然 .NET 5.0 打破了它,至少对我的团队来说是这样。