在IdentityModel.Client.TokenClient

时间:2018-09-26 21:36:15

标签: deployment openid claims-based-identity

我认为这可能会导致缺少/错误的已部署dll的问题,但是据我所见,这是服务器上唯一的程序集,并且与在我的本地计算机上运行的版本相同。 我使用的是IdentityModel版本3.7,尤其是此构造函数,  它可以构建甚至在本地运行。我将其部署到我的QA服务器,并且缺少方法异常。我什至将其升级到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));

,它们在我的本地机器和损坏的质量检查环境中均打印出相同的版本。

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

1 个答案:

答案 0 :(得分:1)

圣牛,何去何从。

因此,问题出在这里,问题程序集实际上不是包含引发缺少的方法的类的类,而是包含参数之一的类。实际上,我的本地计算机和QA之间的System.Net.Http程序集有所不同。因此,实际上这是一种缺少的方法,没有构造函数期望该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>