无法使用Azure函数加载文件或程序集System.Fabric

时间:2018-11-13 08:41:15

标签: c# azure azure-functions azure-service-fabric azure-functions-core-tools

与Azure Functions一起使用的软件包是否有任何限制。我已经尽力进行了研究,但似乎还没有,但是,当我尝试创建引用包“ Microsoft.ServiceFabric”的Azure函数时,出现以下错误:

  

System.Private.CoreLib:执行函数时发生异常:   ScaleDownServiceFabrics。 FunctionApp2:无法加载文件或程序集   'System.Fabric,版本= 6.0.0.0,文化=中性,   PublicKeyToken = 31bf3856ad364e35'。找不到或加载特定的   文件。 (来自HRESULT的异常:0x80131621)。 System.Private.CoreLib:   无法加载文件或程序集'System.Fabric,版本= 6.0.0.0,   文化=中性,PublicKeyToken = 31bf3856ad364e35'。

我曾经尝试过Azure Func和.1和2,以及.Net Framework和.Net Core都没有运气。

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System.Fabric;

namespace FunctionApp5
{
  public static class Function1
  {
    [FunctionName("Function1")]
    public static void Run([TimerTrigger("*/5 * * * * *")]TimerInfo myTimer, ILogger log)
    {
      log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
      FabricClient client = new FabricClient();
    }
  }
}

这是可能的,还是Visual Studio中Azure函数的限制-如果是这样,可以接受哪些程序包?

3 个答案:

答案 0 :(得分:2)

Diego和Suraj指出了64位和32位之间的冲突原因。

有两点要解决

  1. 像您一样将构建平台设置为x64。
  2. 获取x64函数运行时。函数可以在函数运行时上运行(包含在Azure Function核心工具中),但是默认位是VS下载的x86。

要以简单的方式获取x64位,请使用Nodejs从NPM安装Azure Functions核心工具。

安装后,在cmd输入npm i -g azure-functions-core-tools --unsafe-perm true中获得功能核心工具。

然后设置项目调试属性(右键单击您的项目>“属性”>“调试刀片”)。

  1. 将启动类型设置为Executable

  2. 将可执行路径设置为%appdata%\npm\node_modules\azure-functions-core-tools\bin\func.exe

  3. 添加应用程序参数start

答案 1 :(得分:2)

  • ServiceFabric软件包是x64位,如果您的功能目标是32位,则它将失败。尝试刘致远提出的解决方案
  • 由于服务对其他库的依赖性,必须将
  • Service Fabric软件包作为软件包添加,而不是直接在项目中引用dll。您应该添加NuGet软件包Microsoft.ServiceFabric
  • Microsoft.ServiceFabric最新版本6.3.x将从.Net Standard 2.0.Net Framework的{​​{1}}和4.5为目标,请确保在项目中使用其中任何一个。
  • 在构建\部署后,确保将4.7.1个DLL复制到bin文件夹中。
  • 在群集外部使用FabricClient时,必须指定设置和凭据,否则将无法连接到群集。请参见this示例和this文档。
  • FabricClient使用Service Fabric API与群集进行交互,如果软件包存在问题,另一种选择是使用HttpClient并向API发出请求,从而避免软件包冲突

答案 2 :(得分:1)

我遇到的问题与原始帖子中评论的@ tank140完全相同:

Unable to load DLL 'FabricClient.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我在此问题上引发的another question中的更多详细信息。作为答案,已确认用于.NET的SF Client API要求在平台上安装SF运行时,Azure Functions不支持该运行时。