【发布时间】:2019-07-19 06:49:42
【问题描述】:
我有一个在 Azure Functions 上运行的应用程序,包括一个使用适用于 .NET 的 Service Fabric 客户端 API 管理在 Service Fabric 群集上运行的应用程序和服务的类。
当我从 Visual Studio 以调试模式在本地运行应用程序时,应用程序工作正常,并且与 Service Fabric 群集的连接按预期工作。当我将应用程序部署到 Azure Functions 时,使用 Service Fabric 客户端 API 会导致异常:
执行结果:无法加载 DLL 'FabricClient.dll' 或其之一 依赖项:找不到指定的模块。 (例外来自 HRESULT: 0x8007007E)
下面的简化代码。
// SfClientApiHelper.cs
using System.Fabric;
using System.Fabric.Description;
namespace MyService
{
class SfClientApiHelper
{
private FabricClient Client { get; set; }
. . .
public SfClientApiHelper()
{
. . .
this.Client = new FabricClient();
}
// ClassUsingSfClientApiHelper.cs
. . .
SfClientApiHelper sfHelper = new SfClientApiHelper(); // => exception
我在 Visual Studio 项目中安装了 Microsoft.ServiceFabric 包。我从here 安装了win-x64 版本的Azure Functions CLI 工具,构建目标设置为x64;这些指导 here 和 here)。项目使用 zip 部署发布到 Azure Functions,我从 zip 部署包中检查它是否包含库“System.Fabric.dll”,并按照 here 的指导使用 CorFlags.exe 检查它是否为 x64。
另一个 stackoverflow question 关于同样的问题,在讨论中其他可怜的家伙 'tank140' 最终遇到了同样的异常。根据我的理解,讨论没有达成任何解决方案。
在本地运行的开发 PC 上发现缺少的 DLL。 FabricClient.dll 位于文件夹 C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code。可能是因为我在 PC 上安装了 Service Fabric SDK。 如何将这个 DLL 包含在 Function Apps 项目中以部署到 Azure Functions?
我查看了代码中提到的 FabricClient 类的定义(见下图),根据 VisualStudio,该类是在程序集“System.Fabric.dll”中定义的。这包含在带有 NuGet 包“Microsoft.ServiceFabric”的项目中,如图所示。如前所述,此程序集也包含在部署 zip 包中。在我看来,VS项目和现实有些不匹配; FabricClient 类可在本地部署中从未在依赖项中声明的程序集访问。
【问题讨论】:
标签: azure-functions azure-service-fabric