Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts in 2024.1


将条件字符串解析为lambda表达式

将条件字符串动态解析并转换为lambda表达式在很多场景下非常有用,它一方面便于实现逻辑和配置的分离,另一方面也提供了更大的灵活性。在很多场景我们都能看到这种将条件表达式字符串保存起来,然后动态解析执行的列子,比如股票软件里面的公式编辑器、比如规则引擎RulesEngine。通常,要手动实现将条件表达式字符串解析为lambda表达式是困难的,因为这会用到一些编译器里面类似的诸如语法分词,词法分析的内容。 虽然在C#中,可以运用之前介绍的表达式树ExpressionTree来一定程序上简化这些操作,但要手动解析,仍然十分繁琐。本文站在巨人的肩膀上介绍两种,一种是System.Linq.Dynamic.Core,一种是使用Roslyn的Microsoft.CodeAnalysis.Scripting。 …

RulesEngine Roslyn lambda ExpressionTree CodeAnalysis Dynamic LINQ

一种实时监控日志文件变更并读取变更内容的方法

本文介绍了一种监控日志文件变化,并读取变动内容的方法。通过使用FileSystemWatcher类,可以监控文件变化,并通过回调事件触发通知。为了避免文件频繁变动导致频繁的文件读写,这里使用了一个定时器来定时读取。当文件距离上一次读取发生变化时就读取。在读取文件的时候,由于涉及到多进程读写同一个文件,所以这里创建了FileStream并通过指定FileShare参数,而不是直接创建StreamReader来解决了读写冲突导致日志文件丢失的问题。在解决这一问题的过程中,还分析了long4net源码中RollingFileAppender写入文件时的FileShare参数以及StreamReader源码中,如果直接指定path时FileStream的参数。 …

RollingFileAppender log4net FileShare FileSystemWatcher

在C#应用程序中根据不同的编译环境动态生成相应的配置文件

在开发应用程序的时候,会有不同的解决方案配置,在ASP.NET Core时代,针对不同环境的不同配置,Visual Studio原生提供了很好的支持,但对于Winform来说,要实现多环境不同配置则需要花一些功夫。本文首先演示了ASP.NET Core里面如何针对不同的环境配置不同的配置文件,紧接着介绍了在Winform中使用Visual Studio编译后任务的功能,通过手动修改项目文件来实现了不同的编译环境的不同配置,最后针对Visual Studio编译后任务实现不同环境不同配置文件的两个缺点,介绍了使用SlowCheetah第三方插件,结合SlowCheetah的Visual Studio的插件来实现这一功能,简单方便依赖少。希望本文对您了解这一功能有所帮助。 …

SlowCheetah UAT STAGING CONFIGURATION WINFORM