无法加载文件或程序集“Microsoft.WindowsAzure.Storage”Azure 函数

Posted

技术标签:

【中文标题】无法加载文件或程序集“Microsoft.WindowsAzure.Storage”Azure 函数【英文标题】:Could not load file or assembly 'Microsoft.WindowsAzure.Storage' Azure Functions 【发布时间】:2018-09-10 12:15:11 【问题描述】:

我目前正在使用在 Visual Studio 中创建的 Azure 函数。它是一个定时器函数,它调用一些通用代码来写入队列。

在本地运行代码不会导致任何问题。运行良好,但发布时出现以下错误:

无法加载文件或程序集“Microsoft.WindowsAzure.Storage, 版本=9.1.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或 它的依赖项之一。系统找不到文件 指定。||System.IO.FileNotFoundException: 无法加载文件或 程序集'Microsoft.WindowsAzure.Storage,版本=9.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。该系统找不到指定的文件。文件名: 'Microsoft.WindowsAzure.Storage,版本=9.1.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 在 世界语.Core.Function.JobGetterLogic.SendJobsToQue() 在 JobGetter.TimedJob.Run(TimerInfo myTimer, TraceWriter 日志)

这是我的网络作业代码:

public static class TimedJob

    [FunctionName("TimedJob")]
    public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log)
    
        log.Info($"C# Timer trigger function executed at: DateTime.Now");
        try
        
            var brain = new CoreLogic.Function.JobGetterLogic();
            var result = brain.SendJobsToQue();
        
        catch (Exception e)
        
            log.Info(e.Message + "||" + e.ToString());
        

    

【问题讨论】:

The system cannot find the file specified ,检查 dll 并查看它是否存在于正确/所需的目录中 @zackraiyan 我试图将 Azure 存储的 nuget 包添加到函数中,但它不会添加它。我还读到 azure 存储只是 azure 功能系统的一部分。 【参考方案1】:

假设您使用的是 Azure Functions 运行时 v1(当前生产版本),它使用版本 7.2.1WindowsAzure.Storage 程序集。由于是运行时控制加载哪些版本,因此您的实现必须遵守并使用相同的版本。

要解决此问题,请将所有对 WindowsAzure.Storage 的引用(包括传递的)更改为 7.2.1

目前 Azure Functions 不支持绑定重定向。

【讨论】:

如何确定我正在使用的 Azure Functions 版本。传送门中是否有我可以看到的地方? @Dan 是的,选择您的应用,点击Function app settings 并检查Runtime version【参考方案2】:

我的是因为 Newtonsoft.Json 版本,但我在安装 WindowsAzure.Storage 包时甚至在发布之前就得到了。

它在输出中给了我这个:

NU1107:检测到 Newtonsoft.Json 的版本冲突。参考 直接从项目中打包以解决此问题。 PMTool.AzureFunctions -> WindowsAzure.Storage 9.1.0 -> Newtonsoft.Json (>= 10.0.2) PMTool.AzureFunctions -> Microsoft.NET.Sdk.Functions 1.0.6 -> Newtonsoft.Json (= 9.0.1)。

然后回滚。

所以 Functions SDK 中的 Newtonsoft.Json 是 9.0.1 版,但在 Azure 存储上是 10.0.2。

如果这样发布,肯定会出现以下错误:

"无法加载文件或程序集 'Microsoft.WindowsAzure.Storage, 版本=9.1.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或 它的依赖项之一。系统找不到指定的文件。”

因为根本没有被引用。

这可能不是你的确切问题,但它可能会给你一个线索。

【讨论】:

@Mikkail 是根本答案。在 AzureStorage 开始工作并且无法映射类之后,您关于 JSON 内容的部分有助于解决下一个问题。 @Dan 太好了,我们的回答很有帮助。 这很有帮助。我对 Azure.Cosmos 包有同样的问题。更新了 Json 包,问题消失了。有时必须检查 Nuget.org 上的包依赖关系

以上是关于无法加载文件或程序集“Microsoft.WindowsAzure.Storage”Azure 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]