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

问题描述 投票:1回答:1

我正在使用VS2019 Pro v16.3.5

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

顶级项目无法编译,并出现以下错误:

System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Extensions.Logging.Abstractions,版本= 2.2.0.0,文化=中性,PublicKeyToken = adb9793829ddae60'。系统无法找到指定的文件。

该项目确实有一个软件包参考: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包的问题我看到可以在“ C:\ Users \ bowman_rob_a.nuget \ packages”下的全局程序包文件夹中找到“有效”程序包引用的程序集(例如FluentValidation.dll)。但是,全局程序包文件夹不包含Microsoft.Extensions.Logging.Abstractions v2.2.0.0,它包含许多版本,但从2.1.0跳到3.0.0。

如果我从程序包管理器控制台中运行:“ install-package Microsoft.Extensions.Logging.Abstractions -Version 2.2.0”,则出现以下错误:

WriteObject和WriteError方法不能从外部调用BeginProcessing,ProcessRecord和EndProcessing方法,并且只能从内部调用同一线程

尽管有此错误,但程序包确实会出现在解决方案资源管理器的项目程序包部分。但是,它以奇怪的路径列出:“ 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功能依赖于nuget包链:Microsoft.Azure.WebJobs.Extensions-> Microsoft.Azure.WebJobs-> Microsoft.Extensions.Logging.Abstractions。 Microsoft.Azure.WebJobs.Extensions的最新版本是3.0.2,这导致Microsoft.Extensions.Logging.Abstractions的v2.1.0-比Microsoft共享框架中包含的v2.2.0.0还要旧。 AspNetCore.App。有谁知道我如何更改编译器使用的共享框架的版本?我在任何地方都找不到runtimeconfig.json文件!

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

.net-core msbuild nuget azure-functions visual-studio-2019
1个回答
0
投票

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

其中列出了一个奇怪的路径“ C:\ ProgramFiles \ dotnet \ sdk \ NuGetFallbackFolder \ microsoft.extensions.logging.abstractions \ 2.2.0“

FallBackFolders是用于在用户和计算机之间共享软件包以减少风险空间的工具。

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

这就是为什么您无法在C:\Users\xxx\.nuget\packages之类的全局软件包中找到该软件包的原因。>>

对于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程序包,因此,如果您没有使用该程序包的特定原因,则无需引用它。

© www.soinside.com 2019 - 2024. All rights reserved.