Azure 函数本地 (CLI) 与云 dll 不匹配

Azure functions local (CLI) vs cloud dll mismatch

概览

我制作的自定义程序集需要使用不同版本的 WindowsAzure.Storage 取决于我是在本地 运行 使用 Azure Fucnctions CLI 还是在 Azure 上远程

描述

我正在使用带有 Azure Functions 的自定义组件来执行一些 blob 操作逻辑。因此,它取决于程序集 Microsoft.WindowsAzure.Storage。所以我有一个 Visual Studio 解决方案,其中包含:

作为构建触发器的一部分,我将自定义程序集复制到函数中的适当位置,并使用引用标记将其拉入。

在本地工作时,我可以使用 Azure Functions CLI 来 运行 相关功能。部署到 Azure 时,我可以使用门户 运行 我的功能。 (我通过本地 git 回购部署,以防相关)。

我遇到的困难是 AF CLI 似乎需要与真正的 Azure Functions 门户不同的 WindowsAzure.Storage 程序集版本 运行ning。我将 TraceWriter 实例传递给支持库,所以我需要使用 Microsoft.Azure.WebJobs,它对 WindowsAzure.Storage.

有自己的依赖

为了让 Azure 函数在云中运行,我使用以下版本:

Microsoft.Azure.WebJobs.Core v1.1.2
Microsoft.Azure.WebJobs      v1.1.2
WindowsAzure.Storage         v6.1.0

但是我在使用本地托管环境时看到以下错误消息:

Exception while executing function: Functions.SdcLaundrySriTrigger. 
mscorlib: Exception has been thrown by the target of an invocation. f-<Redacted>Trigger__1261552806: Method not found: 
'Void <RedactedClassname>..ctor(Microsoft.Azure.WebJobs.Host.TraceWriter, System.String)'.

如果我使用更新版本的 WebJobs 库,我可以解决本地环境的问题:

Microsoft.Azure.WebJobs.Core v2.0.0-beta1
Microsoft.Azure.WebJobs      v2.0.0-beta1
WindowsAzure.Storage         v7.2.1.0

(更改是通过升级 WebJobs 版本进行的,WindowsAzure.Storage 版本由于是依赖项而升级)。然后 运行 使用 func funcxtion 运行 很好。但是当我将其部署到云环境时,出现以下错误:

error CS1705: Assembly '<redacted>' with identity 
'<redacted>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses
'Microsoft.WindowsAzure.Storage, Version=7.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 
which has a higher version than referenced assembly 
'Microsoft.WindowsAzure.Storage' with identity 
'Microsoft.WindowsAzure.Storage, Version=6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
 2017-02-14T16:49:56.279 Function completed (Failure, Id=f17a046f-e66b-4f50-a812-bc7532db7a0f)2017-02-14T16:49:58.007 Exception while executing function: Functions.<redacted>. Microsoft.Azure.WebJobs.Script: Script compilation failed.

在这一点上,显而易见的事情是将存储程序集的版本降回版本 6.1.0.0 - 但这会将 WebJobs 程序集的版本拉回我开始时使用的版本,这会导致该功能无法在本地使用。

实际行为

不可能使支持程序集的函数依赖于本地和 Azure 上的相同版本的 Microsoft.Azure.WebJobs。

预期行为

一旦我在本地拥有 运行ning 功能,并将其推送到 Azure,它应该具有相同的版本。

问题

有人以前看过这个吗? 有简单的解决方法吗?

我知道这看起来与 , but I do think it is a different issue. And it could be considered similar to This issue as well 表面上相似,但我仍然认为它不太一样

我认为您不需要为

添加外部包或 dll
  • Microsoft.Azure.WebJobs.Core
  • Microsoft.Azure.WebJobs
  • WindowsAzure.Storage

默认情况下,这些已经存在于函数 app

您需要在您的本地项目中使用它来拥有像 azure 函数这样的环境。

尝试从 project.json 文件中删除这些项目的 nuget 依赖项(如果已添加)。

我能够让 7.2.1 在本地 VisualStudio 调试和 Azure 中工作。技巧是更新函数目录中的 project.json:

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "WindowsAzure.Storage": "7.2.1.0"
      }
    }
   }
}