Giter Site home page Giter Site logo

newlifex / x Goto Github PK

View Code? Open in Web Editor NEW
1.7K 165.0 517.0 136.18 MB

Core basic components: log (file / network), configuration (XML / JSON / HTTP), cache (memory / redis), network (TCP / UDP / HTTP), RPC framework, serialization (binary / XML / JSON), APM performance tracking. 核心基础组件,日志(文件/网络)、配置(XML/Json/Http)、缓存(内存/Redis)、网络(Tcp/Udp/Http)、RPC框架、序列化(Binary/XML/Json)、APM性能追踪。

Home Page: https://newlifex.com

License: MIT License

C# 99.96% PowerShell 0.03% HTML 0.02%
network security thread reflection service server serialize rpc api newlife

x's Introduction

NewLife.Core - 核心库

GitHub top language GitHub License Nuget Downloads Nuget Nuget (with prereleases)

核心基础组件,日志(文件/网络)、配置(XML/Json/Http)、缓存(内存/Redis)、网络(Tcp/Udp/Http)、序列化(Binary/XML/Json)、APM性能追踪。

核心库教程:https://newlifex.com/core

新生命项目矩阵

各项目默认支持net8.0/netstandard2.1/netstandard2.0/net4.61/net4.5,旧版(2023.0401)支持net4.0/net2.0

项目 年份 说明
基础组件 支撑其它中间件以及产品项目
NewLife.Core 2002 核心库,日志、配置、缓存、网络、序列化、APM性能追踪
NewLife.XCode 2005 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/TDengine/达梦,自动分表
NewLife.Net 2005 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp)
NewLife.Remoting 2011 RPC通信框架,内网高吞吐或物联网硬件设备场景
NewLife.Cube 2010 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证
NewLife.Agent 2008 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd
NewLife.Zero 2020 Zero零代脚手架,基于NewLife组件生态的项目模板,Web、WebApi、Service
中间件 对接知名中间件平台
NewLife.Redis 2017 Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证
NewLife.RocketMQ 2018 RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验
NewLife.MQTT 2019 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网
NewLife.IoT 2022 IoT标准库,定义物联网领域的各种通信协议标准规范
NewLife.Modbus 2022 ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Siemens 2022 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Map 2022 地图组件库,封装百度地图、高德地图和腾讯地图
NewLife.Audio 2023 音频编解码库,PCM/ADPCMA/G711A/G722U/WAV/AAC
产品平台 产品平台级,编译部署即用,个性化自定义
Stardust 2018 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心
AntJob 2019 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片**,万亿级数据量项目验证
NewLife.ERP 2021 企业ERP,产品管理、客户管理、销售管理、供应商管理
CrazyCoder 2006 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus
EasyIO 2023 简易文件存储,支持分布式系统中文件集中存储。
XProxy 2005 产品级反向代理,NAT代理、Http代理
HttpMeter 2022 Http压力测试工具
GitCandy 2015 Git源代码管理系统
SmartOS 2014 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构
SmartA2 2019 嵌入式工业计算机,物联网边缘网关,高性能.NET6主机,应用于工业、农业、交通、医疗
FIoT物联网平台 2020 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证
UWB高精度室内定位 2020 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证

核心库 NewLife.Core

核心组件,支撑其它所有组件。 主要功能包括:

  • 日志 统一ILog接口,内置控制台、文本文件、WinForm控件和网络日志等实现
  • 网络 单点最高400万长连接
  • RPC 单点最高处理能力2266万tps
  • 缓存 统一ICache接口,内置MemoryCache、Redis实现
  • 安全 AES/DES/RC4/RSA/DSA/CRC
  • 多线程 定时调度TimerX
  • APM 性能追踪,分布式应用必备
  • 序列化 Binary/Json/Xml

新生命开发团队

XCode

新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的70多个开源项目已被广泛应用于各行业,Nuget累计下载量高达100余万次。
团队开发的大数据中间件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台FIoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。

我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IoT服务供应商。

新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
智能大石头

x's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

x's Issues

ApiClient计划主要支持同步操作

目前的异步操作,在机房内网高速通信中,异步切换任务损耗了不少,加大了Latency。
根据RedisClient的经验表明,客户端采用连接池+同步读写的架构,将会得到极低的延迟,常见130us~165us。
因此,我们打算尝试ApiClient中使用同步操作,并配合连接池使用。

Visual Studio-16.9.1 Net5.0.4 Build_netcore.tt 运行自定义工具异常

大石头,nfx4.6.1项目安装NewLife.XCode后生成Entity文件夹,然后我把Build_netcore.tt和Model.xml拷贝到NET 5控制台目录下,然后右键运行自定义工具。
Visual Studio-16.9.1
提示如下错误:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 正在编译转换: 类型“IList<>”在未引用的程序集中定义。必须添加对程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。 Tech.Cluee.Blazor.XCode D:\GIT\Tech.Cluee.Blazor\Main\Tech.Cluee.Blazor.XCode\Build_netcore.tt 19
错误 正在编译转换: 类型“Object”在未引用的程序集中定义。必须添加对程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。 Tech.Cluee.Blazor.XCode D:\GIT\Tech.Cluee.Blazor\Main\Tech.Cluee.Blazor.XCode\Build_netcore.tt 19
错误 正在编译转换: 类型“IDictionary<,>”在未引用的程序集中定义。必须添加对程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。 Tech.Cluee.Blazor.XCode D:\GIT\Tech.Cluee.Blazor\Main\Tech.Cluee.Blazor.XCode\Build_netcore.tt 20

建议:将NewLife.Core/Extension下扩展方法的命名空间(namespace System)迁移到其他的命名空间,以避免和其他团队的扩展方法冲突。

最近我们团队打算使用NewLife.RocketMQ组件,这个组件又引用了NewLife.Core组件。
现在我们引用了NewLife.RocketMQ组件后项目大量报引用冲突错误。

原因:
我们团队对字符串、列表等常用操作封装了自己的扩展方法,如IsNullOrEmpty()
而NewLife.Core组件中对字符串、列表等操作也封装了扩展方法,且命名空间在System下面,
这就导致了如果我们使用System命名空间,则必然引入了NewLife.Core组件的扩展方法,此时如果我们再引入我们自己的扩展方法,就会报错,提示以下方法或属性之间的调用具有二义性

我们既不可能放弃使用System命名空间,也不可能放弃我们自己的扩展方法(因为里面还有一些业务相关的代码),这给我们使用NewLife相关组件造成了极大的困扰。

希望NewLife团队采纳此建议。

2019.0327版本前的bug: getting value from 'Keys' on 'XCode.EntityExtend'

报错信息如下:

  • Newtonsoft.Json.JsonSerializationException: Error getting value from 'Keys' on 'XCode.EntityExtend'. ---> System.NullReferenceException: Object reference not set to an instance of an object.

解决办法:

  • 1、使用X组件自带序列化,返回结果改成序列化后的结果,如果编码有问题,可自行设置contentType,此法改动太多的话不建议使用
return Content(entity.ToJson());
    public class JsonOptionsConfig
    {
        public static void ConfigJsonOptions(MvcJsonOptions options)
        {
            var settings = options.SerializerSettings;
            //日期类型默认格式化处理
            // //setting.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
            settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";

            //// 空值处理
            //setting.NullValueHandling = NullValueHandling.Ignore;

            // 最大序列化深度,包括请求传参的序列化深度,不可设置太小了
            settings.MaxDepth = 5;

            // 忽略循环引用
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

            // 全局设置要排除的字段
            settings.ContractResolver = new LimitPropsContractResolver(new[] { "password", "Extends" }, false);
        }
    }

    /// <summary>
    /// 限制某些属性输出或排除,设置为保留时,只输出保留属性,其他属性全部忽略。
    /// 设置为排除,只排除设置的属性
    /// </summary>
    public class LimitPropsContractResolver : DefaultContractResolver// 小写开头用这个 CamelCasePropertyNamesContractResolver
    {
        private readonly string[] _props = null;

        private readonly bool _retain;

        /// <inheritdoc />
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="props">传入的属性数组</param>
        /// <param name="retain">true:表示props是需要保留的字段  false:表示props是要排除的字段</param>
        public LimitPropsContractResolver(string[] props, bool retain = false)
        {
            //指定要序列化属性的清单
            this._props = props;

            this._retain = retain;
        }

        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            var list = base.CreateProperties(type, memberSerialization);

            // 非实体类型直接返回
            if (!typeof(EntityBase).IsAssignableFrom(type))
            {
                return list;
            }

            //只保留清单有列出的属性
            list = list.Where(p =>
            {
                var has = _props.Any(a => a.Equals(p.PropertyName, StringComparison.OrdinalIgnoreCase));
                if (_retain)
                {
                    return has;
                }

                return !has;
            }).ToList();
            return list;
        }
    }

core项目的使用方式

    services.AddMvc().AddJsonOptions(JsonOptionsConfig.ConfigJsonOptions);

关于IsColumnTypeChanged一点修改建议

\X\XCode\DataAccessLayer\MetaData\DbMetaData_Negative.cs
函数:IsColumnTypeChanged

            var type = entityColumn.DataType;
            if (type.IsEnum) type = typeof(Int32);
            if (type == dbColumn.DataType) return false;
            //增加下面这行
            if (Nullable.GetUnderlyingType(type) == dbColumn.DataType) return false;

函数:IsColumnChanged

                //如果是大文本类型,长度可能不等
                if ((entityColumn.Length > Database.LongTextLength || entityColumn.Length <= 0) &&
                    (entityDb != null && dbColumn.Length > entityDb.LongTextLength || dbColumn.Length <= 0) || dbColumn.RawType.Equals("ntext", StringComparison.OrdinalIgnoreCase) ||
                    dbColumn.RawType.Equals("text", StringComparison.OrdinalIgnoreCase) || entityColumn.RawType.Equals("sysname", StringComparison.OrdinalIgnoreCase)) isChanged = false;

增加函数:

        private string FormatDesc(String str)
        {
            return System.Text.RegularExpressions.Regex.Replace(
                (str + "").Trim().Replace("\r\n", " ").Replace("\n", " ").Replace("\\", "\\\\").Replace("'", "")
                .Replace("\"", "").Replace("。", ""), @"\W", "");
        }

函数:CheckColumnsChange

                //if (item.Description + "" != dbf.Description + "")
                if (FormatDesc(item.Description) != FormatDesc(dbf.Description))

函数:CheckTableDescriptionAndIndex

                //if (entitytable.Description + "" != dbtable.Description + "")
                if (FormatDesc(entitytable.Description) != FormatDesc(dbtable.Description))

在下在使用过程在发现了些小问题,这以上调整后,在开启反向工程时,就不会经常重复执行这些无谓的修改和删除了。
还有IsColumnTypeChanged的判断更加严谨些。

所有依赖NewLife.Core或者XCode的其他组件源码库提示找不到Nuget包

  • 由于新生命团队的组件越来越多的,在完善的过程中需要同时完善基础库,但是NewLife.Core或者XCode不会频繁发布到Nuget,因此采取本地Nuget包源的方法。
  • 这不仅解决了上述所说的问题,还方便调试到基础库,因为本地包源的库是需要自己生成的,详见设置 Nuget 本地源、在线私有源、自动构建打包
  • 因此,此问题需要自己拉取基础库源码生成Nuget包,或者将依赖包自行改成Nuget.org中发布的版本。但不建议这样做,因为可能Nuget.org中的版本并不是最新修改,可能与源码的一些修改对不上

BatchUpdate报错

将FindAll查询出的结果 更改了某个字段后
然后将结果.BatchUpdate()然后报错
System.NotSupportedException:“不支持所指定的方法。”

基于Sqlite数据库使用 EntityBuilder.BuildTables 生成实体代码报错

由于xcode的netcore不再提供动态编译功能,所以我需要使用EntityBuilder.BuildTables 生成实体代码后再动态编译。

发现基于Sqlite数据库的动态编译会报错,问题在于其他数据库使用DbMetaData获取IDataTable信息,里面会设置IDataColumn的Name属性,但是Sqlite使用SQLiteMetaData类初始化信息,却没有设置Name这个属性。

于是在EntityBuilder的某处地方有个Name.ToLower()的代码,并没有判断Name是否null导致报错。所以EntityBuilder.BuildTables目前对于Sqlite是没有作用的。

建议的处理方式就是在SQLiteMetaData里也给IDataColumn额外的设置值,如果没有值则取ColumnName

dotnet core项目的SqlServer驱动安装

Nuget安装System.Data.SqlClient包,右键点击项目,编辑csproj项目文件,加上下面的设置,主要是复制所有dll到输出目录

  <PropertyGroup>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

关于Xcode内置Membership相关表扩展字段(EX1...EX5)

最近准备使用魔方框架平台用于项目开发,但是有一个场景是在Membership表(Role)加字段,但是基于Xcode的实体生成类是内置的,没办法修改,先期想了两种方式:

第一:基于Membership内置表加上扩展表进行实现。
优势:不用动Xcode组件;
劣势:对Membership表操作时另外重载基类进行额外操作;

第二:直接用Xcode源码编译重新生成,然后通过添加引用方式进行应用;
优势:不需要额外操作,直接使用;
劣势:后期升级Xcode,需要获取代码把扩展字段重新加上去再编译再引用方式;

最后,才想到如上把Membership内置表加上几个扩展字段的问题,方便使用框架的人直接继承。

另外:用SQLSERVER数据配置文件生成实体时,会有一些连接不上的问题;(配置文件的连接字符串是可以连接到数据的,但是初始化数据时就找不到)

1、00:15:12.745 20 Y 5 Open错误:[无法打开登录所请求的数据库 "MembershipAA"。登录失败。
用户 'AF887JOJ0L3O2W3\Administrator' 登录失败。]Server=.;Integrated Security=SSPI;Database=MembershipAA;Pooling=false;Application Name=XCode_CubeDemo_Membership
00:15:12.746 20 Y 5 [3]GetSchema(MetaDataCollections)异常重试!无法打开登录所请求的数据库 "MembershipAA"。登录失败。
用户 'AF887JOJ0L3O2W3\Administrator' 登录失败。,连接字符串 Server=.;Integrated Security=SSPI;Database=MembershipAA;Pooling=false;Application Name=XCode_CubeDemo_Membership

2、SET NOCOUNT ON;Insert Into [User](Name, Password, DisplayName, Sex, RoleID, RoleIDs, [Online], Enable, Logins, LastLogin, RegisterTime) Values(N'admin', N'21232F297A57A5A743894A0E4A801FC3', N'管理员', 0, 1, N'', 0, 1, 0, {ts'0001-01-01 00:00:00'}, {ts'0001-01-01 00:00:00'});Select SCOPE_IDENTITY()
00:09:44.908 52 Y 21 初始化数据出错!XCode.Exceptions.XSqlException: 从字符串转换日期和/或时间时,转换失败。
从字符串转换日期和/或时间时,转换失败。[SQL:SET NOCOUNT ON;Insert Into [User](Name, Password, DisplayName, Sex, RoleID, RoleIDs, [Online], Enable, Logins, LastLogin, RegisterTime) Values(N'admin', N'21232F297A57A5A743894A0E4A801FC3', N'管理员', 0, 1, N'', 0, 1, 0, {ts'0001-01-01 00:00:00'}, {ts'0001-01-01 00:00:00'});Select SCOPE_IDENTITY()][DB:Membership/SqlServer] ---> System.Data.SqlClient.SqlException: 从字符串转换日期和/或时间时,转换失败。

多表(各个表均多数据)连接查询结果使用XCode模型问题

问题场景:XCode多表连接查询,针对一张主表,多业务数据,其他关联表的数据多为轻量数据表,这种情况,完全可使用扩展属性处理业务关系。查询时条件构筑可先查询ID集合再接着查询。这个没问题。如果两张表数据量都很大,这种显然不太适用。
问题目的描述:例如:两张表,各表的数据量都很多,之间又存在业务关系,对这两张表进行查询时又希望借助XCode的便利性。当然可以示用视图。但是由于很多项目为防治视图滥用禁止建立视图,所以就很难受。就有了下面的使用方式。
[Serializable]
[DataObject]
[BindTable(@"(SELECT wr.*,
wrm.[material]
,wrm.[specification]
,wrm.[unit]
,wrm.[suppliername]
FROM weighing wr INNER JOIN material wrm ON wr.id = wrm.weighing_id WHERE wr.isdeleted != 1)",
Description = "",
ConnName = "Conn",
DbType = DatabaseType.SqlServer,
IsView = true)]
但是上面这种方式在注解中加入了sql,看起来也能使用。但是有点怪。

适用方案:1.保持上面这种方式完全可以使用2. with as 的支持(群里提出的)但是并不是所有数据库都支持这个关键字3.将这个sql源设计到其他地方去不要放在注解中,注解中只添加引用。 其他更优方式有待考虑

需要获取redis缓存所有的所有键,报错“字符串的长度只能为一个字符。”

需要获取redis缓存所有的所有keys,报错“字符串的长度只能为一个字符。”

初始:
public NewLifeRedis(int dbIndex = 0) { if (Core == null) { FullRedis.Register(); Core = Redis.Create(redisConfig.ServerConStr, dbIndex); } }

方法:
/// <summary> /// 获取所有的键,并根据指定的开头搜索 /// </summary> /// <param name="parttern"></param> /// <returns></returns> public List<string> GetAllKeys(string parttern = null) { var allKeys = Core.Keys; if (allKeys != null && allKeys.Count > 0) { if (parttern == null) return allKeys.ToList(); else return allKeys.Where(x => x.StartsWith(parttern)).ToList(); } else return null; }

报错:
字符串的长度只能为一个字符。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.FormatException: 字符串的长度只能为一个字符。
源错误:
[没有相关的源行]
源文件: d:\Project\2013\smls2015New\Cacher\NewLifeRedis.cs 行: 0
堆栈跟踪:
[FormatException: 字符串的长度只能为一个字符。]
System.Convert.ToChar(String value, IFormatProvider provider) +12718388
System.String.System.IConvertible.ToChar(IFormatProvider provider) +9
System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +12938146
System.Convert.ChangeType(Object value, Type conversionType) +32
NewLife.Reflection.DefaultReflect.ChangeType(Object value, Type conversionType) +770
NewLife.Caching.RedisClient.FromBytes(Packet pk, Type type) +201
NewLife.Caching.RedisClient.TryChangeType(Object value, Type type, Object& target) +425
NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) +183
NewLife.Caching.Redis.get_Keys() +129
Cacher.NewLifeRedis.GetAllKeys(String parttern) in d:\Project\2013\XXXX\Cacher\NewLifeRedis.cs:0

版本号:
NewLife.Core version=8.1.2019.510
NewLife.Redis version=2.1.6951.393

请时间请帮忙看下,谢谢

批量删除支持

目标:
list.Delete(true) 功能增强,不再遍历逐行删除,而是生成 delete from table where id in(1,2,3,4,5) 或者 where id>=1 and id<=5 的语句,批量处理,提升性能。

扩展点:
EntityExtension.cs,扩展 BatchDelete 方法
调整 list.Delete(true),有条件调用 BatchDelete

注意点:
针对自增主键,生成 id>=1 and id<=5 可能效果更好

欢迎补充意见!~

XCode计划支持数据库备份与恢复

计划增加数据库备份与恢复功能。
1,备份数据表的全量数据到独立数据文件,每张表一个文件,压缩存储
2,支持恢复数据文件到目标数据表,目标数据库可以不同于备份源数据库
3,支持多种数据库备份,MySql/SQLite/SqlServer/Oracle
4,支持整库备份与恢复

在ScanController注册系统菜单时抛出异常

System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
在 System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
在 System.Reflection.RuntimeModule.GetTypes()
在 System.Reflection.Assembly.GetTypes()
在 XCode.Membership.Menu`1.MenuFactory.ScanController(String rootName, Assembly asm, String nameSpace) 位置 D:\X\Src\XCode\Membership\菜单.Biz.cs:行号 389
在 NewLife.Cube.AreaRegistrationBase.ScanController() 位置 F:\Workdir\dotNET\XIoT.Cube.Metro\NewLife.Cube\Common\AreaRegistrationBase.cs:行号 332
在 NewLife.Threading.ThreadPoolX.<>c__DisplayClass2_0.b__0(Object s) 位置 D:\X\Src\NewLife.Core\Threading\ThreadPoolX.cs:行号 36

XCode动态表名

XCode是否有办法动态绑定表名?有类似需要修改表前缀的需求。简单看了一下XCode没有发现动态绑定的办法,BindTable与Xml貌似都只能在开发阶段写死表名。

配置文件的Bug

版本:8.6.2020.204

配置文件使用:

[XmlConfigFile("Config/Settings.config", 15000)]
    public class Settings : Config<Settings>
    {
        public List<SsoClients> Clients { get; set; } = new List<SsoClients>() {
            new SsoClients(){
                AllowedScopes = new List<string>(){ "api1" },
                PostLogoutRedirectUris = new List<string>(){ "http://localhost:5000/" },
                RedirectUris = new List<string>(){ "http://sso.demo:5100/signin-oidc" }
            }
        };
        public List<IUsers> Users { get; set; } = new List<IUsers>() {
            new IUsers(){
                Id = "1",
                Email = "@q.com",
                Name = "muxuan",
                NickName = "muxuan",
                Password = "muxuan",
                Phone = "15711111111",
                Role = "Admin"
            }
        };
        public List<Apis> Apis { get; set; } = new List<Apis>() {
            new Apis(){ ApiName = "api1", ApiDisplayName = "接口1" }
        };
    }

报错信息:

image

参数化开启后,sqlserver datetime字段可以为null的情况下,如果不给这个字段赋值,也会报错

参数化开启后,sqlserver datetime字段可以为null的情况下,如果不给这个字段赋值,也会报错

XCode.Exceptions.XSqlException: 参数化查询 '(' 需要参数 '@FinishTime',但未提供该参数。[SQL:SET NOCOUNT ON;Insert Into SatelliteWarehouse(AddTime,IsAvailable,IsFinish,FinishTime,RetryTime) Values(@AddTime,@IsAvailable,@IsFinish,@FinishTime,@RetryTime);Select SCOPE_IDENTITY() [@AddTime=2020-12-03 09:19:50, @IsAvailable=True, @IsFinish=False, @FinishTime=, @RetryTime=2020-12-03 10:35:09]][DB:Test/SqlServer]

关于blob字段的问题

由于blob字段大小不定,在批量操作时经常会出现数据量过大导致出错。能不能在生成xml时,在字段里加入一个说明,表示是否生成,或者生成时自动生成其为扩展属性。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.