Не удалось загрузить файл или сборку Microsoft.Extensions.Logging.Abstractions - PullRequest
1 голос
/ 22 октября 2019

Я использую 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 Я вижу, что сборки для «рабочих» ссылок на пакеты (например, FluentValidation.dll) можно найти в папке глобальных пакетов в папке «C: \ Users \ bowman_rob_a.nuget \ packages». Однако в папке глобальных пакетов нет версии 2.0.0.0 Microsoft.Extensions.Logging.Abstractions, она содержит много версий, но пропускает с 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» содержит v2.2.0.0 библиотеки DLL.

Конфликт версий Я думаю, что основной причиной проблемы может быть то, что функции Azure зависят от цепочки пакетов nuget: Microsoft.Azure.WebJobs.Extensions -> Microsoft.Azure. WebJobs -> Microsoft.Extensions.Logging.Abstractions. Последней версией Microsoft.Azure.WebJobs.Extensions является 3.0.2, и это приводит к v2.1.0 Microsoft.Extentions.Logging.Abstractions - это более старая версия v2.2.0.0, включенная в Shared Framework Microsoft. AspNetCore.App. Кто-нибудь знает, как я могу изменить версию Shared Framework, которая используется компилятором? Я нигде не могу найти файл runtimeconfig.json!

Работа вокруг Мне удалось создать решение, удалив общую ссылку из всех проектов в решении и добавив каждый необходимыйПакет nuget индивидуально - с использованием более старых версий 2.1.0.

1 Ответ

1 голос
/ 24 октября 2019

Некоторая информация и обходной путь, который может помочь решить загадку, если кто-то еще столкнется с подобной проблемой.

Он указан со странным путем "C: \ Program 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)

Я думаю, что это может быть причиной конфликта версий. Вы можете удалить этот пакет, чтобы проверить, является ли он другимОбходной путь.

Кроме того:

Если я создаю новый проект функции Azure в VS16.3.5, нам не нужно ссылаться на эти пакеты вручную:

    <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, поэтому, если у вас нет конкретной причины использовать этот пакет, вам не нужно ссылаться на него.

...