Dependency injection Azure function V3无法加载文件或程序集Microsoft.Extensions.DependencyInjection.Abstractions,版本=5.0.0.0,EF core 5.0-rc1 案例

Dependency injection Azure function V3无法加载文件或程序集Microsoft.Extensions.DependencyInjection.Abstractions,版本=5.0.0.0,EF core 5.0-rc1 案例,dependency-injection,entity-framework-core,azure-functions,Dependency Injection,Entity Framework Core,Azure Functions,我们正在使用.netcore 3.1创建azure function v3。使用EF core 5.0-rc1和深度注射 1) 依赖性注射 2) EF核心5.0 rc-1 错误 无法加载文件或程序集“Microsoft.Extensions.DependencyInjection.Abstractions,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。系统找不到指定的文件 包装 以下是引用的包 <Pro

我们正在使用.netcore 3.1创建azure function v3。使用EF core 5.0-rc1和深度注射

1) 依赖性注射 2) EF核心5.0 rc-1

错误 无法加载文件或程序集“Microsoft.Extensions.DependencyInjection.Abstractions,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。系统找不到指定的文件

包装 以下是引用的包

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0-rc.1.20451.14" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
    <PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>


Microsoft.Azure.Functions.Extensions
依赖于.net标准2.0

虽然实体框架核心5.0 RC1不会在.Net标准2.0平台上运行,但它需要.Net标准2.1。因此,它找不到Microsoft.Azure.Functions.Extensions


有关更多详细信息,您可以参考此内容。

Azure Function v3还不支持此功能。

但是,如果您想在本地对其进行测试,我可以在Azure Function Core Tools目录中运行DLL更新: C:\Program Files\Microsoft\Azure功能核心工具

我需要替换/更新这些Dll以将EF5用于我的函数:


如果您使用的是.NET core 3.1或更低版本。将Microsoft.Extensions.DependencyInjectionMicrosoft.Extensions.DependencyInjection.Abstracts的NuGet软件包降级为3.x.x.

我有一个.Net标准2.1 lib项目,其中一项服务被注入到我的函数应用程序中。在我的解决方案中,库引用了:

Microsoft.Extensions.Options v5.0.0

在我将软件包版本更改为3.1.11后,我的函数应用程序成功运行。换句话说,如果函数应用程序引用的任何项目都引用了.Net 5.0包,那么如果您使用DI,则可能会出现此异常

我的功能应用程序中的当前版本:
功能应用程序:.Net Core 3.1
Azure功能版本:3
其他LIB:.净标准2.1

我从功能应用程序的.Net 5.0开始,但现在显然不支持它:


希望这个答案不久就会过时,但从2021年1月24日起,不要在Azure function应用程序解决方案/项目中使用.Net 5.0项目或包引用。

我将Azure功能切换到一个独立的进程,该进程支持.Net 5.0。这是最近(2021年3月)才发生的。据我所知,它看起来像.NET5.0(.NET6.0将是)。有一个指南发布了,我列出了我为现有项目所采取的步骤

台阶 在.csproj中,以.NET 5.0(
net5.0
)为目标,添加
Exe
。切换到以下软件包:

  • Microsoft.Azure.Functions.Worker
  • Microsoft.Azure.Functions.Worker.SDK
  • 还将
    Microsoft.Azure.WebJobs.Extensions.*
    替换为
    Microsoft.Azure.Functions.Worker.*
在local.settings.json中将运行时更改为:
“函数\u工作者\u运行时”:“dotnet隔离”

如果没有,请添加
Program.cs
。使用以下命令:

公共静态类程序
{
公共静态void Main()
{
var host=new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(服务=>{
//在此处添加您的服务。。。
})
.Build();
host.Run();
}
}
在触发器中,需要将
[FunctionName(“示例”)]
更新为
[Function(“示例”)]
,并将using语句更新为
Microsoft.Azure.Functions.Worker
语句

在那篇文章的底部列出了.NET Core 3.1和.NET 5.0支持之间的一些差异,在进行更改之前值得回顾一下!依赖项注入是开箱即用的,尽管是“正常”意义上的。我认为可以重新编写
Program.cs
,以使用您现有的初创公司

调试 要调试该程序,可以使用Azure function CLI运行该函数并附加Visual Studio调试器

  • 在CSProj目录中打开终端
  • 运行
    func启动--dotnet独立调试
  • 当应用程序运行时,您需要查找进程ID或PID。这行代码看起来像“Azure函数.NET工作者(PID:####)”
  • 在VisualStudio中<代码>调试
    附加到进程…
    ,通过上一步中的PID(dotnet.exe)进行搜索,并
    附加
  • 进一步阅读 文档似乎有点零散,我还找到了另一本关于开发和发布.NET5.0Azure功能的指南


    有一种方法可以更清楚地说明正在发生的事情。

    .NET Core 3.1支持.NET标准2.0和.NET标准2.1。因此,它是一个.NET标准2.1平台。您可以轻松地在本地复制它:创建一个以.NET Core 3.1为目标的控制台应用程序,并参考包Microsoft.Azure.Functions.Extensions 1.1.0和Microsoft.EntityFrameworkCore 5.0.0-rc.1.20451.13,正如所提供示例中的函数应用程序所做的那样。执行该应用程序工作得非常好..NET 5在Azure功能V3中不受支持。它在Azure功能路线图上-这解决了我的问题!我按照指南进行了操作,但我无法调试Azure函数。VisualStudio不会加载符号并显示“经典”消息:“断点当前不会被命中”。你也有同样的问题吗?当涉及到调试时,它不是很好。运行服务时,第一条消息之一将是进程ID(PID)。一旦有了它,就可以将VisualStudio附加到该进程并以这种方式进行调试。我将更新我的答案以包括这些步骤。好的,开始。它起作用了
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <AzureFunctionsVersion>v3</AzureFunctionsVersion>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
        <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.0" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0-rc.1.20451.14" />
        <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
        <PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
        <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
      </ItemGroup>
      <ItemGroup>
        <None Update="host.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="local.settings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          <CopyToPublishDirectory>Never</CopyToPublishDirectory>
        </None>
      </ItemGroup>
    </Project>
    
    [assembly: FunctionsStartup(typeof(xxxxx.Startup))]
    
    Microsoft.Extensions.DependencyInjection.Abstractions.dll
    Microsoft.Extensions.Logging.Abstractions.dll
    Microsoft.Extensions.Options.dll
    Microsoft.Extensions.Primitives.dll