Azure功能“无法加载文件或程序集”

时间:2018-05-03 10:21:34

标签: c# visual-studio azure azure-functions

所以我们一直热爱所有关于函数的事情,除了我们必须将某些库作为Azure函数保留,就像某些库更新的想法一样。 Microsoft.Owin就是其中之一。我们很想成为第4版。

  

无法加载文件或程序集“Microsoft.Owin,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

我尝试过所有内容,例如强制通过Project.json以及整合整个解决方案。在VS中进行本地调试会发生同样的错误。如此部署以及本地正在发生这种情况。

我们遇到了与其他库类似的问题,例如AMQP。

我们正在运行最新的SDK - Microsoft.NET.SDK.Functions版本1.0.13

2 个答案:

答案 0 :(得分:1)

可能重复以下问题。

Azure Functions - Could not load file or assembly ''Microsoft.WindowsAzure.Storage'

尝试查找Owin是否是Azure功能的本机库。如果是,您可以直接推荐。 #r“Library.Namspace”。否则,您需要遵循上述主题中的建议。

答案 1 :(得分:1)

感谢Ashokan的快速回复。我想我可能已经找到了解决这个问题的方法。

https://blog.slaks.net/2013-12-25/redirecting-assembly-loads-at-runtime/ 特别是这篇文章:https://blog.slaks.net/2013-12-25/redirecting-assembly-loads-at-runtime/

看看“npiasecki于2017年5月2日发表评论”,他在那里解释。这几乎就是诀窍而且现在一切正常 - 本地,通过Visual Studio进行调试。

 private static void ConfigureBindingRedirects()
{
   BindingRedirect.RedirectAssembly("Microsoft.Owin", new Version("4.0.0"), "31bf3856ad364e35");

}

private static void RedirectAssembly(
    string shortName,
    Version targetVersion,
    string publicKeyToken)
{
    ResolveEventHandler handler = null;

    handler = (sender, args) =>
    {
        var requestedAssembly = new AssemblyName(args.Name);

        if (requestedAssembly.Name != shortName)
        {
            return null;
        }

        var targetPublicKeyToken = new AssemblyName("x, PublicKeyToken=" + publicKeyToken)
            .GetPublicKeyToken();
        requestedAssembly.Version = targetVersion;
        requestedAssembly.SetPublicKeyToken(targetPublicKeyToken);
        requestedAssembly.CultureInfo = CultureInfo.InvariantCulture;

        AppDomain.CurrentDomain.AssemblyResolve -= handler;

        return Assembly.Load(requestedAssembly);
    };

    AppDomain.CurrentDomain.AssemblyResolve += handler;
}