我创建了一个非常简单的预编译函数(从生成的工具中复制代码):
public class Foo
{
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req)
{
//log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
// Set name to query string or body data
name = name ?? data?.name;
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
}
它所在的dll被复制到Function的文件夹中,并在function.json中链接如下:
{
"scriptFile": "ExternalFunction.dll",
"entryPoint": "ExternalFunction.Foo.Run",
"disabled": false,
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "res",
"type": "http",
"direction": "out"
}
]
}
一切正常。
我当时想要做的是添加一个从Run方法调用的私有方法,所以(宝贝步骤)我将它添加到Foo类:
private static string Test()
{
return "Hello";
}
这会在CLI工具中导致这些错误:
错误AF007:匹配中提供的入口点名称的方法 配置('ExternalFunction.Foo.Run')不存在。您的 函数必须包含一个公共方法,一个名为的公共方法 'run',或者匹配在。中指定的名称的公共方法 'entryPoint'元数据属性。函数编译错误错误 AF007:匹配中提供的入口点名称的方法 配置('ExternalFunction.Foo.Run')不存在。您的 函数必须包含一个公共方法,一个名为的公共方法 'run',或者匹配在。中指定的名称的公共方法 'entryPoint'元数据属性。
这是一个非常奇怪的消息,因为确实添加私有静态方法应该对函数能够找到function.json中指定的公共方法没有影响吗?!
有什么想法吗?
答案 0 :(得分:1)
这确实很奇怪。
如果这是一个缺陷(我会更新问题或我的调查结果),我会处理一个repro并打开一个问题来解决问题,但与此同时,你应该能够在不同的类(静态或其他)中创建这些方法,并在该类上调用该方法。