【问题标题】:NuGet Packages do not compile Azure CSXNuGet 包不编译 Azure CSX
【发布时间】:2018-05-27 02:04:45
【问题描述】:

我在一个 Azure Function 应用程序中包含了一个 NuGet 包,我下载该应用程序以在 Visual Studio 中使用。我已将其添加到 project.json 中,但仍然收到“错误 CS0246:找不到类型或命名空间名称‘NetTopologySuite’(您是否缺少 using 指令或程序集引用?)”。我已经阅读了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"

【问题讨论】:

    标签: azure azure-functions nuget-package csx


    【解决方案1】:

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

    在线可编辑函数的Nuget恢复不是那么敏感,所以你可以等待一段时间(你可以在函数代码中进行一些编辑并点击保存或直接重启整个函数应用)。

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

    更新多个功能共享参考。

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

    1. 下载NetTopologySuite.IO.GeoJSON

    2. 在包中找到四个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。

    【讨论】:

    • 谢谢。我将它移到第一个函数的文件夹中,并且编译时没有错误。但我有一个后续问题。我在应用程序中有多个功能。我无法将 project.json 添加到每个函数文件夹。那么应用程序的其余部分如何意识到这一点。我是否使用#load 项目功能?
    • @GreenGeo 已经更新了我的答案,看看是不是你想要的。
    • 做到了。我真的很感谢你的帮助。我真的在那里挣扎。
    【解决方案2】:

    我看到您正在使用在 Nuget 官方存储库中广泛可用的 3rd 方库。在这种情况下,您需要让 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 内容 - 你可以在网上找到详尽的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-27
      • 2019-01-01
      • 2017-09-08
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多