首页 > 解决方案 > NuGet 包不编译 Azure CSX

问题描述

我在一个 Azure Function 应用程序中包含了一个 NuGet 包,我下载该应用程序以在 Visual Studio 中使用。我已将其添加到 project.json 中,但仍然收到“错误 CS0246:找不到类型或命名空间名称‘NetTopologySuite’(您是否缺少 using 指令或程序集引用?)”。我已经阅读了微软的文档,但找不到我可能做错了什么。

这是我的 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"

标签: azureazure-functionsnuget-packagecsx

解决方案


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

在线可编辑功能的Nuget恢复不是那么敏感,所以您可以等待一段时间(您可以在功能代码中进行一些编辑并单击保存或直接重新启动整个功能应用程序)。

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

更新多个功能共享参考。

一个功能包还原不能被其他人使用。因此,如果您不想添加project.json到每个函数中,我们必须手动上传 dll。请参阅共享程序集

  1. 下载NetTopologySuite.IO.GeoJSON

  2. 在包中找到四个 dll( NetTopologySuite.dll/NetTopologySuite.IO.GeoJSON.dll/GeoAPI.dll/PowerCollections.dll) 并将它们上传到bin函数应用文件夹下的文件夹中。

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

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

如果你清楚地知道这些依赖关系,你只能上传和引用你需要的dll。


推荐阅读