NuGet 包不编译 Azure CSX

NuGet Packages do not compile Azure CSX

我在 Azure Function 应用程序中包含了一个 NuGet 包,我下载了它以在 Visual Studio 中使用。我已将它添加到 project.json,但我仍然得到 "error CS0246: The type or namespace name 'NetTopologySuite' could not be found (are you missing a using directive or an assembly reference?)"。我通读了 microsoft's documentation,但找不到我可能做错的地方。

这是我的 csx 的样例:

#r "System.Data"

using System;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using NetTopologySuite;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    \ Code to retrieve data from database and turn it into an array
    \ of GeoJSON features called DataFromDatabase not shown


    NetTopologySuite.Features.Feature[] TrailSegments = DataFromDatabase;


    HttpResponseMessage resp = req.CreateResponse(HttpStatusCode.OK);
    resp.Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(DataFromDatabase), System.Text.Encoding.UTF8, "application/json");
    return resp;
}

这是我的 project.json:

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "NetTopologySuite.IO.GeoJSON": "1.14.0"
      }
    }
  }
}

有没有人对此有更多经验,可以提供比文档中的内容更多的内容?

"FUNCTIONS_EXTENSION_VERSION": "~1"
"WEBSITE_NODE_DEFAULT_VERSION": "6.5.0"

我看到您正在使用 Nuget 官方存储库中广泛可用的第 3 方库。在这种情况下,您需要让 Azure 知道您的包 'NetTopologySuite' 驻留在哪个 Nuget 存储库中..

Github: https://github.com/NetTopologySuite/NetTopologySuite
NuGet v3: https://www.myget.org/F/nettopologysuite/api/v3/index.json
NuGet v2: https://www.myget.org/F/nettopologysuite/api/v2
  1. 创建Nuget.config 文件
  2. 在该文件中添加以下内容并根据您的环境重新配置它。

Nuget.config 内容 - 您可以在线找到详尽的文件。

如果您确实将 project.json 文件上传到您的函数文件夹(而不是函数应用程序文件夹),那么您所做的是完全正确的。我已按照您的步骤操作,我这边一切正常。

在线可编辑功能的Nuget恢复不是那么敏感,所以你可以稍等片刻(你可以在功能代码中进行一些编辑,然后点击保存或直接重启整个功能应用程序)。

之后在function文件夹下可以看到一个project.lock.json。这意味着软件包已成功安装。然后一切顺利。

更新多函数共享参考

一个功能包还原不能被其他人使用。因此,如果您不想为每个函数添加 project.json,我们必须手动上传 dll。参见 shared assemblies

  1. 下载NetTopologySuite.IO.GeoJSON.

  2. 在package中找到4个dll(NetTopologySuite.dll/NetTopologySuite.IO.GeoJSON.dll/GeoAPI.dll/PowerCollections.dll)上传到function app文件夹下的bin文件夹中

  3. #r "..\bin\NetTopologySuite.IO.GeoJSON.dll"这样的代码中添加四个程序集。您可能还需要添加 #r "Newtonsoft.Json" 因为它是该包中的一个依赖项。

  4. 如果您使用带命名空间的 dll,如 NetTopologySuite.Features.Feature[],则不必导入命名空间。反之亦然。

如果你清楚那些依赖关系,你可以只上传和引用你需要的dll。