具有相同依赖项的不同版本的 nuget 包的 azure 函数

Posted

技术标签:

【中文标题】具有相同依赖项的不同版本的 nuget 包的 azure 函数【英文标题】:azure functions with nuget packages that have different versions of the same dependency 【发布时间】:2016-11-26 08:05:20 【问题描述】:

我正在编写一个 Azure 函数,它使用来自我的私人订阅源的 2 个 nuget 包(A 和 B)。包 A 直接使用 Dapper 版本 1.50.2,包 B 使用 Dapper.SimpleCrud 1.13.0,它依赖于 Dapper 版本 [1.42.0, 2.0.0)。

在 Azure 函数中,我添加了 project.json,我在其中指定了包 A 和 B 及其版本。

当我查看 azure 函数中已安装的软件包时,我看到 Dapper 1.42.0 和 1.50.2 都已安装。当我尝试调用包 A 和 B 中的方法时,我在 azure 函数日志上收到一个错误,提示它找不到 Dapper 1.40 版。 (取决于我如何设置我的 project.json,它将是 Azure Function 找不到的 Dapper 1.40 或 1.50)

我创建了 Dapper.SimpleCRUD 包的测试版本,其中对 dapper 的依赖来自 [1.50.2, 2.0.0) 并且一切正常。

我还尝试将 Dapper 1.50.2 添加到 project.json 中,希望 Dapper.SimpleCRUD 可以使用它,但它似乎仍然会引入 Dapper 1.42。

我在 Azure Functions 上是否缺少某些设置以允许此设置工作,或者这是对 Azure Function 包管理的限制?。

感谢您提供的任何帮助。

【问题讨论】:

这似乎是 Azure Functions 和 .NET 的一个普遍问题,仍然在此处跟踪:github.com/Azure/azure-webjobs-sdk-script/issues/992。如***.com/questions/38093972/… 所述,已经取得了一些进展 【参考方案1】:

我似乎是一个问题(AFAIK 甚至迟到了 2016 年 10 月),他们仍然没有找到在 azure 函数中进行绑定重定向的好方法。

我在使用两个具有相同依赖项(但版本不同)的不同 nuget 包的 azure 函数时遇到了类似的问题。

这里有一个类似的问题:Azure Functions binding redirect

我最终保留了尽可能少的 nugets 以避免绑定重定向。如果您的项目无法做到这一点,请尝试使用 webjobs(至少作为短期解决方案),直到 azure 函数支持这一点。

【讨论】:

感谢您的回复。似乎这是一个周期性发生的问题。我昨天花了所有时间试图解决这个问题并构建了我的 Dapper.SimpleCRUD 版本并且它工作正常。今天,我将我的依赖项回滚到具有最小值 [1.42 的原始 Dapper.SimpleCRUD )并重新启动我的应用程序服务,并且一切正常(使用 Dapper.SimpleCRUD 的调用以及对使用 Dapper 1.50.2 的其他包的调用.. ... Nish,如果您仍然遇到问题,请在 GitHub (github.com/Azure/azure-webjobs-sdk-script) 上提交带有详细步骤/描述的问题,以便我们进行调查。我还在处理(过期的)帖子,其中包含有关 Azure Functions 中托管依赖项的选项和行为的详细信息,这可能有助于解决一些问题。

以上是关于具有相同依赖项的不同版本的 nuget 包的 azure 函数的主要内容,如果未能解决你的问题,请参考以下文章

project.json 指定 NuGet 依赖项的确切版本

您如何覆盖传递的 nuget 依赖项

用于查找包的多级依赖项的脚本

Dotnet 发布到同一文件夹

如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars

使用一个文件集中管理你的 Nuget 依赖版本号