我正在做一个项目,我想将代码从 17.2 版重构到 21.2 版
为此,我采用了这种方式,将域组件 (DC) 接口迁移到纯 XPO 类。
当我运行该项目时,我收到此错误:
CannotResolveClassInfoException:无法解析类型“[Main.Alpha.Module, Version=1.0.7961.26051, Culture=neutral, PublicKeyToken=null]Main.Alpha.Module.Models.Base.Interfaces.IBaseIdentificationCode”的 ClassInfo。
我该如何解决这个错误?
IBaseIdentificationCode:
[DefaultClassOptions]
[NavigationItem("Base")]
[XafDisplayName("IdentificationCode")]
[ImageName("BO_Sale_v92")]
public interface IBaseIdentificationCode
{
string Name { get; set; }
IdentificationCodeType IdentificationCodeType { get; set; }
//[XafDisplayName("Mailing")]
IBaseReceiveObject ReceiveObject { get; set; }
[XafDisplayName("Mailing")]
public Mailing Mailing { get; set; }
}
识别码:
[DefaultClassOptions]
public class IdentificationCode : XPEntity, IBaseIdentificationCode,
IPersistentInterface<IBaseIdentificationCode>,
IPersistentInterfaceData<IBaseIdentificationCode>,
IPropertyChangeNotificationReceiver
{
public IdentificationCode(Session session) : base(session)
{
CreateLogics();
}
IPersistentInterfaceData<IBaseIdentificationCode> IPersistentInterface<IBaseIdentificationCode>.PersistentInterfaceData => this;
IBaseIdentificationCode IPersistentInterfaceData<IBaseIdentificationCode>.Instance => this;
#region Properties
string fName;
public string Name
{
get { return fName; }
set { SetPropertyValue<string>(nameof(Name), ref fName, value); }
}
IdentificationCodeType fIdentificationCodeType;
[Size(36)]
[Association(@"IdentificationCodeReferencesIdentificationCodeType")]
public IdentificationCodeType IdentificationCodeType
{
get { return fIdentificationCodeType; }
set { SetPropertyValue<IdentificationCodeType>(nameof(IdentificationCodeType), ref fIdentificationCodeType, value); }
}
public IBaseReceiveObject ReceiveObject { get; set; }
Mailing fMailing;
//[Size(36)]
[Association(@"IdentificationCodeReferencesMailing")]
public Mailing Mailing
{
get { return fMailing; }
set { SetPropertyValue<Mailing>(nameof(Mailing), ref fMailing, value); }
}
#endregion
#region Methods
public override void AfterConstruction()
{
base.AfterConstruction();
base.Oid = Guid.NewGuid();
CreateAggregatedData();
CreateLogics();
InitializeDefaultValues();
InvokeAfterConstructionLogic();
}
protected virtual void CreateLogics()
{
}
void IPropertyChangeNotificationReceiver.PropertyChanging(string propertyName, object newValue)
{
OnChanging(propertyName, newValue);
}
protected virtual void OnChanging(string propertyName, object newValue)
{
if (!base.IsLoading)
{
InvokeBeforeChangeLogic(propertyName, newValue);
}
}
protected virtual void InvokeBeforeChangeLogic(string propertyName, object newValue)
{
}
void IPropertyChangeNotificationReceiver.PropertyChanged(string propertyName, object oldValue, object newValue)
{
OnChanged(propertyName, oldValue, newValue);
}
protected override void OnChanged(string propertyName, object oldValue, object newValue)
{
base.OnChanged(propertyName, oldValue, newValue);
if (!base.IsLoading)
{
InvokeAfterChangeLogic(propertyName, oldValue, newValue);
}
}
protected virtual void InvokeAfterChangeLogic(string propertyName, object oldValue, object newValue)
{
}
protected virtual void CreateAggregatedData()
{
}
protected virtual void InitializeDefaultValues()
{
}
protected virtual void InvokeAfterConstructionLogic()
{
BaseIdentificationCodeLogic.AfterConstruction(this, XPObjectSpace.FindObjectSpaceByObject(this));
}
#endregion
}
XP实体:
public class XPEntity : XPCustomObject, IEntity
{
public XPEntity(Session session) : base(session) { }
private Guid fOid;
[Key(true)]
public Guid Oid
{
get { return fOid; }
set { SetPropertyValue<Guid>(nameof(Oid), ref fOid, value); }
}
}
错误详情:
启动应用程序时发生错误。CannotResolveClassInfoException:无法解析类型“[Main.Alpha.Module, Version=1.0.7962.21845, Culture=neutral, PublicKeyToken=null]Main.Alpha.Module.Models.Base.Interfaces.IBaseIdentificationCode”的 ClassInfo。
DevExpress.Xpo.Metadata.XPDictionary.GetClassInfo(Type classType) TargetInvocationException:调用的目标已引发异常。
System.RuntimeMethodHandle.InvokeMethod(object target, object[] arguments, Signature sig, bool constructor, bool wrapExceptions)
CannotResolveClassInfoException: Cannot resolve ClassInfo for type '[Main.Alpha.Module, Version=1.0.7962.21845, Culture=neutral,
PublicKeyToken=null]Main.Alpha.Module.Models.Base.Interfaces.IBaseIdentificationCode'。DevExpress.Xpo.Metadata.XPDictionary.GetClassInfo(Type classType) DevExpress.Xpo.Metadata.XPMemberInfo.get_CollectionElementType() DevExpress.Xpo.Metadata.XPMemberInfo.GetAssociatedMember() DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource.InitXPClassMemberInfo(object memberSource, XafMemberInfo 成员)DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource.InitMemberInfo(ITypeInfo 所有者,XafMemberInfo 成员,对象 memberSource)DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource.InitMemberInfo(对象 memberSource,XafMemberInfo 成员)DevExpress.ExpressApp.DC.TypeInfo。 InitializeMember(对象成员,字符串成员名称)DevExpress.ExpressApp.DC.Xpo.XpoTypeInfoSource.EnumXPClassMembers(TypeInfo 信息,EnumMembersHandler 处理程序)DevExpress.ExpressApp.DC.Xpo。
TargetInvocationException:调用的目标已引发异常。
System.RuntimeMethodHandle.InvokeMethod(object target, object[] arguments, Signature sig, bool constructor, bool wrapExceptions) System.Reflection.RuntimeMethodInfo.Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters,
CultureInfoculture) System.Reflection.MethodBase.Invoke(object obj, object[] parameters) DevExpress.DashboardAspNetCore.EndpointRouteBuilderExtension.MapControllerRoute(object endpointRouteBuilder, string name, string pattern, object defaults, object constraint) System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid6< T0, T1, T2, T3, T4, T5>(CallSite 站点, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) DevExpress.DashboardAspNetCore.EndpointRouteBuilderExtension.MapDashboardRoute(object endpointRouteBuilder, string routePrefix, string controllerName , 字符串 areaName) System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid5<T0, T1, T2, T3, T4>(CallSite 站点, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) DevExpress.DashboardAspNetCore.EndpointRouteBuilderExtension.MapDashboardRoute(object endpointRouteBuilder,字符串 routePrefix,字符串 controllerName) DevExpress.ExpressApp.Dashboards.Blazor.StartupExtensions.MapXafDashboards(IEndpointRouteBuilder endpoints, string dashboardEndpoint, string dashboardControllerName) Main.Alpha.Blazor.Server.Startup+<>c.b__5_1(IEndpointRouteBuilder endpoints) 在 Startup.cs
app.UseAuthentication(); app.UseAuthorization(); app.UseXaf(); app.UseDevExpressBlazorReporting(); app.UseXafDashboards(); app.UseEndpoints(endpoints => { endpoints.MapXafDashboards(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); endpoints.MapControllers(); }); } }
Startup.cs 中的 Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions.UseEndpoints(IApplicationBuilder builder, Action configure) Main.Alpha.Blazor.Server.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseXaf(); app.UseDevExpressBlazorReporting(); app.UseXafDashboards(); app.UseEndpoints(endpoints => { endpoints.MapXafDashboards(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); endpoints.MapControllers(); }); }
System.RuntimeMethodHandle.InvokeMethod(object target, object[] arguments, Signature sig, bool constructor, bool wrapExceptions) System.Reflection.RuntimeMethodInfo.Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfoculture) Microsoft。 AspNetCore.Hosting.ConfigureBuilder.Invoke(对象实例,IApplicationBuilder 构建器)Microsoft.AspNetCore.Hosting.ConfigureBuilder+<>c__DisplayClass4_0.b__0(IApplicationBuilder 构建器)Microsoft.AspNetCore.Hosting.GenericWebHostBuilder+<>c__DisplayClass15_0.b__1(IApplicationBuilder 应用程序)DevExpress.Web。 Internal.ConfigurationSettings+<>c__DisplayClass0_0.b__0(IApplicationBuilder 构建器)Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter+<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder 构建器)Microsoft。AspNetCore.Server.IIS.Core.IISServerSetupFilter+<>c__DisplayClass2_0.b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.HostFilteringStartupFilter+<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting .Internal.Host.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions。在 Program.cs 中运行(IHost 主机) Main.Alpha.Blazor.Server.Program.Main(string[] args)b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.HostFilteringStartupFilter+<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelToken) Microsoft.Extensions .Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌)Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌)Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost 主机)Main.Alpha.Blazor.Server。 Program.cs 中的 Program.Main(string[] args)b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.HostFilteringStartupFilter+<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用) Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelToken) Microsoft.Extensions .Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌)Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌)Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost 主机)Main.Alpha.Blazor.Server。 Program.cs 中的 Program.Main(string[] args)StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken令牌) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost 主机) Main.Alpha.Blazor.Server.Program.Main(string[] args) 在 Program.csStartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelToken) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken令牌) Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost 主机) Main.Alpha.Blazor.Server.Program.Main(string[] args) 在 Program.csProgram.cs 中的 Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host) Main.Alpha.Blazor.Server.Program.Main(string[] args)Program.cs 中的 Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host) Main.Alpha.Blazor.Server.Program.Main(string[] args)