我觉得这可能会落入缺失/不正确部署的DLL的水桶,但据我可以在服务器上看到这是它和它相同的版本,在我的本地机器运转的唯一装配。我用IdentityModel 3.7版,具体这个构造,和它建立,甚至在本地运行就好了。我把它部署到我的QA服务器和巴姆缺少方法例外。我甚至它升级到了3.9,只是部署,看看是否会工作,没有任何变化。不幸的是该组件没有一个公钥标记,虽然我找遍了所有驱动器的IdentityModel.dll的另一个版本,并没有发现任何。在GAC没事,重启没有工作,我的想法。
找不到方法: '太虚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我添加日志代码记录所有构造函数和方法,并在这两个盒子,他们打印出来的一样。我甚至可以看到我的构造函数注销权缺少方法异常之前。
圣牛什么一趟。
因此,这里是什么的问题是,这个问题总成wasnt实际包含抛出缺少方法,但参数而是一个类中的一个。该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>