KirillOsenkov / MSBuildStructuredLog

A logger for MSBuild that records a structured representation of executed targets, tasks, property and item values.
MIT License
1.41k stars 188 forks source link

Replace FieldInfo.SetValue() with expression trees #713

Closed KirillOsenkov closed 8 months ago

KirillOsenkov commented 8 months ago

Similar to

        public static Func<T, R> GetFieldAccessor<T, R>(string fieldName)
        {
            ParameterExpression param = Expression.Parameter(typeof(T), "arg");
            MemberExpression member = Expression.Field(param, fieldName);
            LambdaExpression lambda = Expression.Lambda(typeof(Func<T, R>), member, param);
            Func<T, R> compiled = (Func<T, R>)lambda.Compile();
            return compiled;
        }
KirillOsenkov commented 8 months ago

Started in https://github.com/KirillOsenkov/MSBuildStructuredLog/commit/fef308b028567be73876123193936cc1bf9b1d76