gpt4 book ai didi

.net-core - 无法加载文件或程序集 Microsoft.Extensions.Logging.Abstractions

转载 作者:行者123 更新时间:2023-12-03 13:37:40 26 4
gpt4 key购买 nike

我使用的是 VS2019 Pro v16.3.5

我有一个包含 Azure 函数项目的解决方案,该项目引用了多个类库项目。

顶级项目编译失败,错误如下:

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.Logging.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.



该项目确实有一个包引用:PackageReference Include="Microsoft.AspNetCore.App"并且这个框架包含缺少的dll,所以我不知道为什么会遇到问题。

我的想法可能是引用的项目之一取决于不同的版本,但我没有看到。

我确实尝试在顶级项目中明确引用包,但这没有区别:
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0.0" />

这是顶级 csproj 文件的当前副本:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Base.Core.SharedKernel" Version="1.0.0.23885" />
<PackageReference Include="FluentValidation" Version="8.4.0" />
<PackageReference Include="FluentValidation.AspNetCore" Version="8.4.0" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.8.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.5" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.27" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Interfaces.Avaloq.Application\Interfaces.Avaloq.Application.csproj" />
<ProjectReference Include="..\Interfaces.Avaloq.Common\Interfaces.Avaloq.Common.csproj" />
<ProjectReference Include="..\Interfaces.Avaloq.Infrastructure\Interfaces.Avaloq.Infrastructure.csproj" />
<ProjectReference Include="..\Interfaces.Avaloq.Persistence\Interfaces.Avaloq.Persistence.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>

引用 Nuget 包的问题
我可以看到“工作”包引用的程序集(例如 FluentValidation.dll)可以在“C:\Users\bowman_rob_a.nuget\packages”的全局包文件夹中找到。但是,全局包文件夹不包含 Microsoft.Extensions.Logging.Abstractions 的 v2.2.0.0,它包含很多版本但从 2.1.0 跳到 3.0.0。

如果我从包管理器控制台运行:“install-package Microsoft.Extensions.Logging.Abstractions -Version 2.2.0”然后我收到以下错误:

The WriteObject and WriteError methods cannot be called from outside the overrides of the BeginProcessing, ProcessRecord, and EndProcessing methods, and they can only be called from within the same thread



尽管出现错误,该包还是会出现在解决方案资源管理器的项目包部分。但是,它列出了一个奇怪的路径“C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.logging.abstractions\2.2.0”

引用共享包的问题
因为 v2.2.0.0 包含在共享包引用“Microsoft.AspNetCore.App”中,那么我想程序集应该从那里拉出来?共享包的程序集驻留在“C:\Program Files\dotnet\shared”中。共享包有很多版本
“Microsoft.AspNetCore.App”但再次跳过了 2.2.0.0,从 2.1.13 到 2.2.4。但是,文件夹“C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\2.2.4\Microsoft.Extensions.Logging.Abstractions.dll”确实包含 dll 的 v2.2.0.0。

版本冲突
我认为问题的根本原因可能是 Azure Functions 依赖于 nuget 包链:Microsoft.Azure.WebJobs.Extensions --> Microsoft.Azure.WebJobs --> Microsoft.Extensions.Logging.Abstractions。 Microsoft.Azure.WebJobs.Extensions 的最新版本是 3.0.2,这导致 Microsoft.Extentions.Logging.Abstractions 的 v2.1.0 - 这比 Microsoft 共享框架中包含的 v2.2.0.0 旧。 AspNetCore.App。有谁知道我如何更改编译器使用的共享框架的版本?我在任何地方都找不到 runtimeconfig.json 文件!

解决
我已经能够通过从解决方案中的所有项目中删除共享引用并单独添加每个必需的 nuget 包来构建解决方案 - 使用较旧的 2.1.0 版本。

最佳答案

如果其他人遇到类似问题,一些信息和解决方法可能有助于解决难题。

It is listed with a strange path "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.logging.abstractions\2.2.0"



FallBackFolders是用于在用户和机器之间共享包以减少风险空间的东西。

它们与包源的不同之处在于包 Assets 将被直接引用,不会被复制到用户的包文件夹中。

这就是为什么你在全局包中找不到包的原因,比如 C:\Users\xxx\.nuget\packages .

For Version Conflict



正如你上面提到的, Microsoft.Azure.WebJobs.Extensions的链是:
Microsoft.Azure.WebJobs.Extensions --> Microsoft.Azure.WebJobs --> Microsoft.Extensions.Logging.Abstractions(2.1.0)

并且由于您引用了 Microsoft.AspNetCore.App包,它的链:
Microsoft.AspNetCore.App(2.2.0) --> Microsoft.Extensions.Logging.Abstractions(2.2.0)

我认为这可能是版本冲突的原因。您可以删除该包以检查它是否是另一种解决方法。

另外:

如果我在 VS16.3.5 中新建一个 Azure Function 项目,我们不需要手动引用这些包:
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.8.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.5" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />

Microsoft.NET.Sdk.Functions依赖于这些包,nuget 将帮助我们下载并引用它们。

我尝试了几种 Azure 函数项目,但都不需要 Microsoft.AspNetCore.App包,因此如果您没有使用该包的特定原因,则无需引用它。

关于.net-core - 无法加载文件或程序集 Microsoft.Extensions.Logging.Abstractions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com