【问题标题】:A namespace cannot directly contain members in the Azure Function App命名空间不能直接包含 Azure Function App 中的成员
【发布时间】:2018-02-02 22:04:32
【问题描述】:

目标:在 VS2017 上执行 Azure Function 教程并复制代码,但在本地执行时出现了几个错误。感谢您的帮助。

https://www.cyotek.com/blog/upload-data-to-blob-storage-with-azure-functions

错误 1 ​​- 与 Run 相关:

CS0116 命名空间不能直接包含成员,例如字段或方法 UploadToBlobFunctionApp C:\AzureFunctions\UploadToBlobFunctionApp\UploadToBlobFunctionApp\UploadToBlobFunction.cs 15 Active

错误 2 - 与 Task CreateBlob 相关:

CS0116 命名空间不能直接包含成员,例如字段或方法 UploadToBlobFunctionApp C:\AzureFunctions\UploadToBlobFunctionApp\UploadToBlobFunctionApp\UploadToBlobFunction.cs 45 活动

错误 3 - 与 await CreateBlob 相关:

CS0103 当前上下文中不存在名称“CreateBlob”UploadToBlobFunctionApp C:\AzureFunctions\UploadToBlobFunctionApp\UploadToBlobFunctionApp\UploadToBlobFunction.cs 36 Active

代码Function.cs:

using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
HttpStatusCode result;
string contentType;

result = HttpStatusCode.BadRequest;

contentType = req.Content.Headers?.ContentType?.MediaType;

if (contentType == "application/json")
{
    string body;

    body = await req.Content.ReadAsStringAsync();

    if (!string.IsNullOrEmpty(body))
    {
        string name;

        name = Guid.NewGuid().ToString("n");

        await CreateBlob(name + ".json", body, log);

        result = HttpStatusCode.OK;
    }
}

return req.CreateResponse(result, string.Empty);
}

private async static Task CreateBlob(string name, string data, 
TraceWriter log)
{
string accessKey;
string accountName;
string connectionString;
CloudStorageAccount storageAccount;
CloudBlobClient client;
CloudBlobContainer container;
CloudBlockBlob blob;

accessKey = "qwertyw4VhRajxlZn9C4hTMB8oSwE4klNUsvTy9VeTCIQ11111vFVVGExDwJ+JUboFv2B79j+W6foqLWE92w==";
accountName = "mystorage";
connectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accessKey + ";EndpointSuffix=core.windows.net";
storageAccount = CloudStorageAccount.Parse(connectionString);

client = storageAccount.CreateCloudBlobClient();

container = client.GetContainerReference("functionupload");

await container.CreateIfNotExistsAsync();

blob = container.GetBlockBlobReference(name);
blob.Properties.ContentType = "application/json";

using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
    await blob.UploadFromStreamAsync(stream);
}
}

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

    您引用的示例是使用脚本函数(csx 文件)。它们主要在直接在 Azure 门户中编辑代码时使用。

    我认为您正在尝试使用 csprojcs 文件创建预编译的应用程序。在这种情况下,您的代码应该是有效的 C#,即所有方法都应该在类中。

    看看this example

    您还可以使用属性来标记您的函数和触发器,而不是手动创作function.json,请参阅示例here

    【讨论】:

    • 似乎我在带有 HTTP 触发器的 VS2017 Azure Functions 项目中根本没有 function.json 文件。如何创作?
    • 使用我上一个链接中描述的基于属性的模型。安装 Azure Functions Visual Studio 2017 Tools 这将对您有所帮助。
    • 我确实有正在调试的 function.json 文件,并且我在 VS2017 中确实有功能工具。我在同一个环境中有另一个代码做同样的错误。它在类中有方法。命名空间 CopyFileFromADLSToBlob { 公共静态类 CopyFileFromADLSToBlob {
    • @Keke 你是 C# 新手吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多