如何在Azure函数中引用多个外部程序集?

问题描述:

直到现在我的Azure功能只依赖一个外部程序集(Assembly1),并且工作正常。如何在Azure函数中引用多个外部程序集?

但是,最近我们不得不做一些更改,因为现在有两个外部程序集,其中Assembly1引用Assembly2。

我已经部署了Assembly2同样是为Assembly1(我的意思是,.dll文件复制到Azure的功能的“bin”文件夹,并将其导入使用“r组成Assembly2”语句Azure的功能。

这给了我下面的编译错误 -

异常而执行功能:Functions.ProcessCsvRows Assembly1:无法加载文件或程序集“Assembly2, 版本= 1.0.0.0,文化=中性公钥= null或它的一个 依赖关系。系统找不到指定的文件。 开始(Id = dc837832-9303-4ae4-a8ae-133ab531250c)无法找到 程序集'Assembly2,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null'。你是否缺少私人装配文件?

请有关此有关详细信息,下面的代码 -

#r "Assembly1" 
#r "Assembly2" 

using System; 
using System.Net; 
using Newtonsoft.Json; 
using System.IO; 
using System.Collections.Generic; 
using System.Configuration; 
using Assembly1.Entities; 

public static async Task<object> Run(HttpRequestMessage req, TraceWriter log){ 
    var jsonContent = await req.Content.ReadAsStringAsync(); 
    dynamic data = JsonConvert.DeserializeObject(jsonContent.ToString()); 
    ProcessCsvFileContents_Result _processResponse = await DataProcessor.ProcessCsvFileContents(data.FileContent.ToString(), connectionString, clientId, redirectUrl); // DataProcessor exists in Assembly1 only 
    -- response processing code -- 
} 

非常感谢有这方面的帮助。

+0

像这样? http://www.robfox.nl/2016/04/27/referencing-external-assemblies-azure-functions/ – 4c74356b41

+0

是的,我已经提到过,并且我正在执行这里列出的所有步骤,除了DLL文件的位置我上传到相关Azure函数的bin文件夹中,因为我的私有程序集(而不是共享)。正如我所说,这一切工作正常,直到我不得不使用“Assembly1”。一旦我介绍了“Assembly2”,我开始面对这个问题。 – Nirman

+0

因此,您的函数文件夹中包含您的dll的bin文件夹?这应该工作,然后根据文档[这里](https://azure.microsoft.com/en-us/documentation/articles/functions-reference-csharp/)。尝试按照文档将“.dll”添加到程序集名称的末尾,并查看是否有帮助。 – mathewc

Nirman,

私有程序集应该以其扩展名(例如.dll)引用。看起来你正在运行到执行失败(编译成功)

可否请您检查以下内容:

  1. 确保两个,assembly1.dll和assembly2.dll位于bin文件夹中,该函数的文件夹
  2. 如果在部署文件之前更新了函数引用,则绑定可能失败。你可以请重新启动你的功能应用程序(重新启动网站)

希望这有助于!

+0

谢谢法比奥..重新启动Azure上的网站做的伎俩..非常感谢你:) – Nirman

+0

Nirman,我正在审查这个答案,并注意到,不知何故,我有参考指令错误(本意是说简单文件名,意思没有路径,而是说装配)。我已经在上面阐明了,但我假设你已经这样做了,否则你可能会遇到问题,但是在引用专用程序集时应该使用文件扩展名。 –