代码之家  ›  专栏  ›  技术社区  ›  Rob Bowman

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

  •  0
  • Rob Bowman  · 技术社区  · 7 年前

    我使用的是VS2019 Pro v16.3.5

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

    System.IO.FileNotFoundException:无法加载文件或程序集 区域性=中性,PublicKeyToken=adb9793829ddae60'。系统无法 查找指定的文件。

    该项目确实有一个包引用: 这个框架包含了缺失的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>
    

    我可以在“C:\Users\bowman\u rob\u a.nuget\packages”的global packages文件夹中找到“工作”包引用的程序集(如FluentValidation.dll)。但是,global packages文件夹不包含Microsoft.Extensions.Logging.Abstractions的v2.2.0.0,它包含许多版本,但从2.1.0跳到3.0.0。

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

    引用共享包时出现问题 因为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.AspNetCore.App中包含的v2.2.0.0版本旧。有人知道如何更改编译器使用的共享框架的版本吗?我在任何地方都找不到runtimeconfig.json文件!

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

    0 回复  |  直到 7 年前
        1
  •  4
  •   LoLance    7 年前

    Files\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功能项目,我们不需要手动引用这些包:

        <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

    我尝试了几种Azure功能项目,但没有一种需要 微软.AspNetCore.App 包,所以如果您没有使用该包的具体原因,就不需要引用它。

        2
  •  3
  •   Luis Gouveia bummi    5 年前

    确保没有任何包高于项目的.NET版本。

    在我的例子中,安装的Microsoft.Extensions.Http版本是5.0,而项目是在.NET Core 3.1中。当我把图书馆降到3.1级时,一切都很顺利。

    资料来源: https://github.com/Azure/azure-functions-core-tools/issues/2304

        3
  •  0
  •   sapfile    6 年前

    enter image description here

    这是错误消息: 未处理的异常。System.IO.FileLoadException:无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractations,Version=5.0.0.0,Culture=neutral,PublicKeyToken=…….”。定位的程序集的清单定义与程序集引用不匹配。(…)