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
- 创建Nuget.config 文件
- 在该文件中添加以下内容并根据您的环境重新配置它。
Nuget.config 内容 - 您可以在线找到详尽的文件。
如果您确实将 project.json
文件上传到您的函数文件夹(而不是函数应用程序文件夹),那么您所做的是完全正确的。我已按照您的步骤操作,我这边一切正常。
在线可编辑功能的Nuget恢复不是那么敏感,所以你可以稍等片刻(你可以在功能代码中进行一些编辑,然后点击保存或直接重启整个功能应用程序)。
之后在function文件夹下可以看到一个project.lock.json
。这意味着软件包已成功安装。然后一切顺利。
更新多函数共享参考
一个功能包还原不能被其他人使用。因此,如果您不想为每个函数添加 project.json
,我们必须手动上传 dll。参见 shared assemblies。
在package中找到4个dll(NetTopologySuite.dll/NetTopologySuite.IO.GeoJSON.dll/GeoAPI.dll/PowerCollections.dll
)上传到function app文件夹下的bin
文件夹中
在#r "..\bin\NetTopologySuite.IO.GeoJSON.dll"
这样的代码中添加四个程序集。您可能还需要添加 #r "Newtonsoft.Json"
因为它是该包中的一个依赖项。
如果您使用带命名空间的 dll,如 NetTopologySuite.Features.Feature[]
,则不必导入命名空间。反之亦然。
如果你清楚那些依赖关系,你可以只上传和引用你需要的dll。
我在 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
- 创建Nuget.config 文件
- 在该文件中添加以下内容并根据您的环境重新配置它。
Nuget.config 内容 - 您可以在线找到详尽的文件。
如果您确实将 project.json
文件上传到您的函数文件夹(而不是函数应用程序文件夹),那么您所做的是完全正确的。我已按照您的步骤操作,我这边一切正常。
在线可编辑功能的Nuget恢复不是那么敏感,所以你可以稍等片刻(你可以在功能代码中进行一些编辑,然后点击保存或直接重启整个功能应用程序)。
之后在function文件夹下可以看到一个project.lock.json
。这意味着软件包已成功安装。然后一切顺利。
更新多函数共享参考
一个功能包还原不能被其他人使用。因此,如果您不想为每个函数添加 project.json
,我们必须手动上传 dll。参见 shared assemblies。
在package中找到4个dll(
NetTopologySuite.dll/NetTopologySuite.IO.GeoJSON.dll/GeoAPI.dll/PowerCollections.dll
)上传到function app文件夹下的bin
文件夹中在
#r "..\bin\NetTopologySuite.IO.GeoJSON.dll"
这样的代码中添加四个程序集。您可能还需要添加#r "Newtonsoft.Json"
因为它是该包中的一个依赖项。如果您使用带命名空间的 dll,如
NetTopologySuite.Features.Feature[]
,则不必导入命名空间。反之亦然。
如果你清楚那些依赖关系,你可以只上传和引用你需要的dll。