我正在使用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包,我已经能够构建解决方案。
如果有人遇到类似问题,某些信息和解决方法可能有助于解决难题。
其中列出了一个奇怪的路径“ 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
程序包,因此,如果您没有使用该程序包的特定原因,则无需引用它。