Microsoft.AspNet.Identity and Microsoft.AspNet.Identity.Enti



背景:我们正在进行的项目由几个共享两个库的解决方案组成。今天一切都写在.NET Framework 4.6.1中。该项目的目标是在新项目中采用.NET Core,并能够在Docker中运行web应用程序。

随着.NET Standard 2.1的新发布,以及.NET Framework 4.8将保留在.NET Standard 2.0上而不是实现.NET Standard 2.1,这似乎是开始的正确时机。微软的Immo Landwerth说:

但同样正确的是,.NET框架中的创新率为了减少破损,必须减速。从这个意义上说,你通常应该预计大多数新功能只会可在.NET Core(以及衍生平台,和Unity,因为它们是从与.NET Core相同的源代码构建的(。

https://blogs.msdn.microsoft.com/dotnet/2018/11/05/announcing-net-standard-2-1/

我们希望在新项目中使用新功能,但不希望将每个旧项目都转换为.NET Core。为了保持.NET Framework.NET Core之间的兼容性,我们决定将共享库转换为.NET Standard 2.0

https://learn.microsoft.com/en-us/dotnet/standard/net-standard

除了以下依赖项之外,这真的很好:

1.System.Net.Http.WebRequestHandler-已解决

用于客户端证书,如下所示:

WebRequestHandler requestHandler = new WebRequestHandler();
//Add certificate if setting exists
if (!string.IsNullOrEmpty(pushEvent?.CertificateThumbprint?.Thumbprint))
{
var certificate = certificateService.GetClientCertificate(pushEvent?.CertificateThumbprint?.Thumbprint);
if (certificate != null)
{
requestHandler.ClientCertificates.Add(certificate);
}
}
var client = new HttpClient(requestHandler);

我为它找到了一个NuGet,但它似乎是恶意的。该软件包以Project Site的形式链接到Microsoft文档,并将Microsoft拼错为作者Microsfot。报告了它,以便微软可以看看它。

https://www.nuget.org/packages/WebRequest.WebRequestHandler/

然而,我们似乎可以将WebRequestHandler更改为HttpClientHandler以使其开箱即用。

2.System.Runtime.Remoting.Messaging->CallContext.LogicalGetData-已解决

在此处解决:https://stackoverflow.com/a/53211839/3850405

3.Microsoft.AspNet.Identity.EntityFramework.IdentityUser

我们有一个继承自IdentityUser的用户模型。

public class AppUser : IdentityUser, ICurrentUser
{
public bool LocalEnvironment { get; set; }
public Guid? TokenId { get; set; }
}

4.Microsoft.AspNet.Identity.UserManager,来自程序集Microsoft.AspNet.Identity.Core

我们在项目之间共享UserManager。CCD_ 16来自与CCD_ 18兼容的CCD_。

public class AppUserManager : UserManager<AppUser>
{
public AppUserManager(IUserStore<AppUser> store)
: base(store)
{
}
public static AppUserManager Create<AppContainer>() where AppContainer : Container, new()
{
var container = new AppContainer();
var store = container.GetInstance<IUserStore<AppUser>>();
var manager = new AppUserManager(store);
manager.UserValidator = new UserValidator<AppUser>(manager)
{
AllowOnlyAlphanumericUserNames = false
};

return manager;
}
}

如果EntityFramework NuGet安装在共享库中,则会出现以下警告。我们不能冒险。

使用还原包"EntityFramework 6.2.0"'.NETFramework,Version=v4.6.1'而不是项目目标框架'.NETStandard,Version=v2.0'。此软件包可能不完全兼容与您的项目。

我读过他们为什么把IdentityUser放在EF库中,IdentityUser是非常特定于EF的。然而,这使得移植到.NET Standard 2.0.变得更加困难。

为什么IdentityUser类在Microsoft.AspNet.Identity.EntityFramework命名空间中,而不在Core包中?

我还读到ASP.NET Core 2.0已经删除了基础IdentityUserPOCO(普通旧CLR对象(。

CCD_ 25和CCD_ 26仅与CCD_。我们是否需要将ASP.NET上的实体框架和标识升级到Core,或者是否有其他方法使其与.NET Standard一起工作?我们需要让它运行的最后一步。

https://learn.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x?view=aspnetcore-2.1

https://learn.microsoft.com/en-us/ef/efcore-and-ef6/side-by-side

假设我们只需要EntityFramework 6.2.0来处理.NET Framework.NET Core,这将在.NET Core 3中解决。

.NET Core 3是一个主要的更新,它增加了对构建Windows的支持使用Windows Presentation Foundation(WPF(的桌面应用程序,Windows窗体和实体框架6(EF6(。

https://blogs.msdn.microsoft.com/dotnet/2018/12/04/announcing-net-core-3-preview-1-and-open-sourcing-windows-desktop-frameworks/

相关内容

  • 没有找到相关文章

最新更新