我使用的是VS2019 Pro v16.3.5。
我有一个解决方案,其中包含一个引用了多个类库项目的Azure函数项目。
顶级项目无法编译,出现以下错误:
System.IO.FileNotFoundException: 找不到文件或程序集“Microsoft.Extensions.Logging.Abstractions,Version=2.2.0.0,Culture=neutral,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”中找到。然而,全局包文件夹中没有包含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 Functions具有对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降级 - 这比包含在共享框架Microsoft.AspNetCore.App中的v2.2.0.0要旧。是否有人知道如何更改编译器使用的共享框架的版本? 我找不到runtimeconfig.json文件!
解决方法 我已经能够通过从解决方案中所有项目中删除共享引用并逐个添加每个所需的nuget软件包来使解决方案构建 - 使用较旧的2.1.0版本。