我面临着azure函数中的privates程序集的奇怪问题,我有一个Azure函数应用程序,其中包含五个函数,这些函数有一个共享bin文件夹,我放置我的程序集,这些程序集依次依赖于Entity Framework和LinqKit。在每个函数的所有project.json文件中添加了依赖项,但私有程序集无法引用这些并且失败。请帮忙。 Project.json -
{
"frameworks": {
"net46":{
"dependencies": {
"EntityFramework": "6.1.3",
"Newtonsoft.Json": "9.0.1",
"LinqKit": "1.1.7.2"
}
}
}
}
为了在我的功能应用程序中进一步说明,我有五个不同的功能,这些功能依赖于2个私有程序集,我不希望在每个函数中保留单独的副本(因为这可能导致不同文件夹中相同dll的不同版本导致问题)所以我创建了一个共享bin文件夹,引用了私有程序集但问题发生了,因为这些私有程序集还依赖于一些他们无法找到它们的nuget包 -
#r "..\bin\Marketware.Domain.dll"
#r "..\bin\Marketware.AzureIntegration.dll"
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics.Eventing.Reader;
答案 0 :(得分:4)
如果你想使用你的私人程序集(不是来自nuget),你必须这样做:
不幸的是,这个dll需要在每个需要的函数文件夹中。
示例强>
#r "CustomAssembly.dll"
using System.Net;
using CustomAssembly;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
CustomAssemblyClass.MethodName(); // here call your method
return req.CreateResponse(HttpStatusCode.OK, "");
}
答案 1 :(得分:1)
将花费一些时间尝试重新编写您的方案,因为乍一看,它应该按预期工作。与此同时,您有几个选择:
1-部署共享程序集时,从项目输出中复制所有二进制文件,包括其依赖项。共享程序集文件夹将位于探测逻辑中,它们将从那里解析。这也消除了让project.json引用每个函数的依赖关系的需要。
2-为您的共享程序集创建一个NuGet包,并在该包上指定您的包依赖项(EF和LinqKit),将该包发布到私有源(可能类似于MyGet,甚至是函数中的文件夹)应用程序)。您的函数只需要引用该包而不是它的依赖项,因为它们会自动解析。您可以在此处找到有关使用自定义来源的更多信息:How do you use custom NuGet feeds with Azure Functions?
虽然最初可能需要更多的工作,但这两个选项都优于原始方法(包括不需要让函数了解间接依赖性),并且应该更可靠。
希望这有帮助!