【问题标题】:Error while use custom class when implement IProfileService. The type 'IProfileService' is defined in an assembly that is not referenced实现 IProfileService 时使用自定义类时出错。类型“IProfileService”在未引用的程序集中定义
【发布时间】:2019-05-30 19:06:27
【问题描述】:

我正在将 IdentityServer 从 2.2 更新到 2.4。我有两个项目,一个是入口点,另一个是服务。 我将这两个项目都更新到了 2.4 并面临以下问题:

类型“IProfileService”是在一个未定义的程序集中定义的 参考。

另外,我还有一个错误:

类型“ClaimsProfileService”不能用作类型参数“T” 在泛型类型或方法中 'IdentityServerBuilderExtensionsAdditional.AddProfileService(IIdentityServerBuilder)'。 'ClaimsProfileService' 没有隐式引用转换 到“IdentityServer4.Services.IProfileService”。

类 ClaimsProfileService 实现了接口 IProfileService。它看起来很奇怪,因为当我将 IdentityServer 降级到 2.2 时它可以正常工作。

实际上,存在奇怪的行为,当我在 Startup.cs 中创建一个嵌套类而不是实现 IProfileService 时,我没有收到任何错误。

这是我的身份服务器确认。

var identityServer = services.AddIdentityServer(options =>
                {
                    options.Events.RaiseErrorEvents = true;
                    options.Events.RaiseInformationEvents = true;
                    options.Events.RaiseFailureEvents = true;
                    options.Events.RaiseSuccessEvents = true;
                    options.Authentication.CookieLifetime = TimeSpan.FromSeconds(7200);
                })
                // this adds the config data from DB (clients, resources, CORS)
                .AddConfigurationStore(options =>
                {
                    options.ConfigureDbContext = builder =>
                        builder.UseSqlServer(connectionString,
                            sql => sql.MigrationsAssembly(migrationsAssembly));
                })
                // this adds the operational data from DB (codes, tokens, consents)
                .AddOperationalStore(options =>
                {
                    options.ConfigureDbContext = builder =>
                        builder.UseSqlServer(connectionString,
                            sql => sql.MigrationsAssembly(migrationsAssembly));

                    // this enables automatic token cleanup. this is optional.
                    options.EnableTokenCleanup = true;
                    // options.TokenCleanupInterval = 15; // interval in seconds. 15 seconds useful for debugging
                })
                .AddAspNetIdentity<ApplicationUser>()
                .AddProfileService<ClaimsProfileService>()
                .AddExtensionGrantValidator<DelegationGrantValidator>();

这是主应用项目的 PackageReferences。

  <ItemGroup>
    <PackageReference Include="IdentityServer4" Version="2.4.0" />
    <PackageReference Include="IdentityServer4.AccessTokenValidation" Version="2.7.0" />
    <PackageReference Include="IdentityServer4.AspNetIdentity" Version="2.4.0" />
    <PackageReference Include="IdentityServer4.EntityFramework" Version="2.4.0" />
    <PackageReference Include="jQuery" Version="3.3.1" />
    <PackageReference Include="jQuery.Validation" Version="1.17.0" />
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.2" />
    <PackageReference Include="Microsoft.jQuery.Unobtrusive.Validation" Version="3.2.11" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.2" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
  </ItemGroup>

这是服务项目的 PackageReferences。

  <ItemGroup>
    <PackageReference Include="IdentityServer4" Version="2.4.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.2" />
  </ItemGroup>

感谢您对此问题的任何帮助。

【问题讨论】:

    标签: identityserver4


    【解决方案1】:

    已经修复。刚刚从 NuGet 文件夹 2.2 版手动删除。然后我重新安装了 IdentityServer,一切正常。

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 2011-08-16
      • 2014-08-15
      • 2016-05-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多