代码之家  ›  专栏  ›  技术社区  ›  Morgeth888

在IdentityModel.Client.TokenClient上找不到构造函数

  •  1
  • Morgeth888  · 技术社区  · 6 年前

    我觉得这可能会落入缺少/不正确部署的dll的桶中,但据我在服务器上看到的,这是它上的唯一程序集,其版本与在本地计算机中工作的相同。 我使用的是IdentityModel 3.7版本,特别是这个构造函数, 它在本地构建甚至运行都很好。我将它部署到我的QA服务器上,bam缺少方法异常。我甚至把它升级到了3.9版本,并进行了部署,只是想看看这是否可行,没有任何改变。很遗憾,此程序集没有公钥标记,尽管我在所有驱动器中搜索了IdentityModel.dll的另一个版本,但没有找到任何。GAC里什么都没有,重启没用,我没主意了。

    找不到方法:“Void IdentityModel.Client.TokenClient..ctor(System.String,System.String,System.Net.Http.HttpMessageHandler,IdentityModel.Client.AuthenticationStyle)”

    编辑我添加了一些日志代码

        Assembly assem = Assembly.GetAssembly(typeof(TokenClient));
        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assem.Location);
        string version = fvi.FileVersion;
        _logger.Error(String.Format("{0} : {1}", assem.FullName, version));
    

    它们都会在我的本地盒子和坏掉的QA环境上打印出相同的版本。

    编辑2 我添加了日志记录代码来记录所有构造函数和方法,并在两个框中打印出相同的内容。我甚至可以看到我的构造函数在缺少方法异常之前注销。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Morgeth888    6 年前

    天哪,真是一次旅行。

    这就是问题所在,问题程序集实际上不是包含抛出丢失方法的类的程序集,而是一个参数。实际上,System.Net.Http程序集在本地计算机和QA之间是不同的。所以实际上它是一个丢失的方法,没有构造函数需要该HttpMessageHandler类型的不同版本。通过在web.config中包含这一点,我又开始工作了。可怕的是,它实际上是一个默认参数,所以您有时甚至不会注意到这个参数

    <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> </dependentAssembly>