无法解析类型 'System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel'

The type 'System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel' cannot be resolved

我对这个错误感到困惑。我到处都看了,用谷歌搜索了我所知道的一切。

我正在将应用程序从 dotnet 4.5.3 更新到 dotnet 4.8。设置没有发生太大变化,这个身份配置已经很长时间没有改变了。更新后的代码 运行 在开发和测试环境中表现良好。现在是时候更新 qa 环境了。此升级有新服务器。所有 运行 相同版本 Windows 10(只是最新的)。我已经在所有这些设备上安装了 dotnet 4.8。我已验证 GAC 中存在 System.IdentityModel.dll。 (我什至反编译了程序集并验证了这个 class 存在于其中。)我已经验证了我的 .csproj 文件中引用了 dll。

然而,当我启动网站时,这是迎接我的错误。

让我重复一遍,同样的代码在开发和测试环境中运行良好,但同样的构建在 qa 环境中失败。 这是导致问题的配置。

  <system.identityModel>
    <identityConfiguration>
      <claimsAuthenticationManager type="MF.Framework.Security.CustomClaimsAuthenticationManager, MF.Framework.Data" />
      <audienceUris>
        <add value="https://some.client.com/ws/IRNExternalOrderCS_v2_2" />
        <add value="https://login.to.another.client.com/services/trust" />
        <add value="https://more.clients.com/idp/shibboleth" />
        <add value="https://test.westeurope.cloudapp.azure.com/AuthServices" />
      </audienceUris>
      <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel">
        <trustedIssuers>
          <add name="IdSrv" thumbprint="value-redacted" />
        </trustedIssuers>
      </issuerNameRegistry>
      <certificateValidation certificateValidationMode="None" />
      <securityTokenHandlers>
        <clear />
        <add type="System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel" />
        <securityTokenHandlerConfiguration>
          <audienceUris>
            <add value="https://some.client.com/ws/IRNExternalOrderCS_v2_2" />
            <add value="https://another.client.com/idp/shibboleth" />
            <add value="https://test.westeurope.cloudapp.azure.com/AuthServices" />
          </audienceUris>
        </securityTokenHandlerConfiguration>
      </securityTokenHandlers>
    </identityConfiguration>
  </system.identityModel>

如果有人知道为什么这不是从 GAC 加载的,我洗耳恭听。

问题的答案是将程序集依赖项中的 Copy Local 设置为 true。

不确定为什么找不到这个程序集。这让我大吃一惊。在花了 +3 天的时间寻找它之后,我称它退出,因为这个解决方案有效。