我有一个Azure函数,当我将blob复制到容器中时会触发该函数。该函数成功将blob复制到子文件夹中进行处理,但我想更改管道调度以触发管道运行。但是,当我尝试在代码中更改管道计划时,我收到以下错误:
无法加载文件或程序集' Microsoft.Threading.Tasks,Version = 1.0.12.0,Culture = neutral,...或其中一个依赖项。系统找不到指定的文件。
我已经浏览了nuget软件包列表,删除了那些没有被使用的软件包,并确保我使用的是最新版本。我还在我的csx文件中评论了不必要的使用,但我还是得到了错误。如果我注释掉管道更新调用,则错误消失,函数运行到最后。
我的project.json文件看起来像这样(不是我已经包含注释掉的软件包以显示我之前尝试过的其他软件包):
{
"frameworks": {
"net46": {
"dependencies": {
////"Hyak.Common": "1.1.0",
"Microsoft.Azure.Common": "2.1.0",
"Microsoft.Azure.Common.Dependencies": "1.0.0",
"Microsoft.Azure.Management.DataFactories": "4.11.0",
////"Microsoft.Bcl": "1.1.10",
////"Microsoft.Bcl.Async": "1.0.168",
////"Microsoft.Bcl.Build": "1.0.21",
"Microsoft.IdentityModel.Clients.ActiveDirectory": "3.13.8"
////"Microsoft.Net.Http": "2.2.29"
}
}
}
}

最后,在csx文件中,我的用法如下(再次包括注释掉的行)
#r "System.Runtime"
#r "System.Threading.Tasks"
#r "Microsoft.WindowsAzure.Storage"
using System;
using System.Net;
using System.Threading.Tasks;
using System.Configuration;
//using Newtonsoft.Json;
using Microsoft.Azure;
//using Microsoft.Azure.Common;
using Microsoft.Azure.Management.DataFactories;
using Microsoft.Azure.Management.DataFactories.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

更新管道的代码如下:
client.Pipelines.CreateOrUpdate(resourceGroupName, dataFactoryName, new PipelineCreateOrUpdateParameters()
{
Pipeline = pl.Pipeline
});
log.Info($"Pipeline rescheduled for {slice}");
如果我将其作为控制台应用程序/ Web应用程序(包括多个引用,包括Microsoft.Threading.Tasks)运行,则管道更新可以正常工作,但相同的代码无法在我的Azure功能中运行。
有谁知道我可能缺少的nuget包/版本或引用?
答案 0 :(得分:1)
事实证明,这个问题是由引用旧版.Net(即4.5而不是4.6)的project.lock.json文件引起的。将其更新为4.6解决了问题。
为完整起见,project.lock.json文件现在如下所示:
{
"locked": false,
"version": 2,
"targets": {
".NETFramework,Version=v4.6": {}
},
"libraries": {},
"projectFileDependencyGroups": {
"": [],
".NETFramework,Version=v4.6": []
}
}