Rob*_*man 8 msbuild nuget .net-core azure-functions visual-studio-2019
我使用的是 VS2019 Pro v16.3.5
我有一个包含 Azure 函数项目的解决方案,该项目引用了多个类库项目。
顶级项目编译失败,错误如下:
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractions,版本=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" />
Run Code Online (Sandbox Code Playgroud)
这是顶级 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>
Run Code Online (Sandbox Code Playgroud)
引用 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,这导致 Microsoft.Extentions.Logging.Abstractions 的 v2.1.0 - 这比 Microsoft 共享框架中包含的 v2.2.0.0 旧。 AspNetCore.App。有谁知道我如何更改编译器使用的共享框架的版本?我在任何地方都找不到 runtimeconfig.json 文件!
变通方法 我已经能够通过从解决方案中的所有项目中删除共享引用并单独添加每个必需的 nuget 包来构建解决方案 - 使用较旧的 2.1.0 版本。
如果其他人遇到类似问题,一些信息和解决方法可能有助于解决难题。
它列出了一个奇怪的路径“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)
Run Code Online (Sandbox Code Playgroud)
既然你引用了这个Microsoft.AspNetCore.App包,它的链:
Microsoft.AspNetCore.App(2.2.0) --> Microsoft.Extensions.Logging.Abstractions(2.2.0)
Run Code Online (Sandbox Code Playgroud)
我认为这可能是版本冲突的原因。您可以删除该包以检查它是否是另一个解决方法。
此外:
如果我在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" />
Run Code Online (Sandbox Code Playgroud)
由于Microsoft.NET.Sdk.Functions依赖这些包,nuget会帮我们下载并引用它们。
我尝试了几种Azure函数项目,但它们都不需要该Microsoft.AspNetCore.App包,因此如果您没有特定原因使用该包,则不需要引用它。
我在 VS2022 上尝试运行 funcapp 的 httptrigger 函数。我将 Microsoft.Extensions.Http 从 7.0.0 降级到 6.0.0,将 Microsoft.Extensions.Logging.Abstractions 降级到 6.0.3。这很好用。
确保没有任何包高于项目的 .NET 版本。
在我的情况下,Microsoft.Extensions.Http 的安装版本是 5.0,而项目在 .NET Core 3.1 中。一旦我将库降级到 3.1,一切都会顺利进行。
来源:https : //github.com/Azure/azure-functions-core-tools/issues/2304
我刚刚使用 .net 6 创建了一个新项目并遇到了这个问题。
我安装了实体框架nuget包:
Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Tools
支持对 SQL 数据库的数据访问。
这两个库默认为 .net 7 的最新版本。
这些是我遇到的错误:
[2023-01-16T18:15:16.759Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
[2023-01-16T18:15:16.790Z] The 'Function1' function is in error: Could not load file or assembly 'Microsoft.Extensions.Logging.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
即使将项目更改为 .net 7 也无法解决问题,尽管我想知道是否必须将所有 nuget 包更新到 7。我必须将这两个库降级到 .net 6,它编译并运行良好。
无论如何,我想继续留在 6 并获得长期支持。现在唯一的麻烦是 nuget 想要将这两个库升级到 .net 7,以便它们显示为可升级。
| 归档时间: |
|
| 查看次数: |
16681 次 |
| 最近记录: |