static SystemXsltExecutable() { if (CLR.IsMono) { monoTransform = (MonoTransform)Delegate.CreateDelegate(typeof(MonoTransform), typeof(XslCompiledTransform).GetMethod("Transform", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(XPathNavigator), typeof(XsltArgumentList), typeof(XmlWriter), typeof(XmlResolver) }, null)); } else { commandField = typeof(XslCompiledTransform).GetField("command", BindingFlags.Instance | BindingFlags.NonPublic); ParameterExpression commandParam = Expression.Parameter(typeof(object), "instance"); ParameterExpression inputParam = Expression.Parameter(typeof(IXPathNavigable), "input"); ParameterExpression resolverParam = Expression.Parameter(typeof(XmlResolver), "resolver"); ParameterExpression argumentsParam = Expression.Parameter(typeof(XsltArgumentList), "arguments"); ParameterExpression writerParam = Expression.Parameter(typeof(XmlWriter), "writer"); MethodInfo executeMethod = commandField.FieldType.GetMethod("Execute", BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); MethodCallExpression executeMethodExpr = Expression.Call(Expression.Convert(commandParam, commandField.FieldType), executeMethod, inputParam, resolverParam, argumentsParam, writerParam); net20Transform = Expression.Lambda <Net20Transform>(executeMethodExpr, commandParam, inputParam, resolverParam, argumentsParam, writerParam).Compile(); } }
static SystemXsltExecutable() { if (CLR.IsMono) { monoTransform = (MonoTransform)Delegate.CreateDelegate(typeof(MonoTransform), typeof(XslCompiledTransform).GetMethod("Transform", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(XPathNavigator), typeof(XsltArgumentList), typeof(XmlWriter), typeof(XmlResolver) }, null)); } else { commandField = typeof(XslCompiledTransform).GetField("command", BindingFlags.Instance | BindingFlags.NonPublic); ParameterExpression commandParam = Expression.Parameter(typeof(object), "instance"); ParameterExpression inputParam = Expression.Parameter(typeof(IXPathNavigable), "input"); ParameterExpression resolverParam = Expression.Parameter(typeof(XmlResolver), "resolver"); ParameterExpression argumentsParam = Expression.Parameter(typeof(XsltArgumentList), "arguments"); ParameterExpression writerParam = Expression.Parameter(typeof(XmlWriter), "writer"); MethodInfo executeMethod = commandField.FieldType.GetMethod("Execute", BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); MethodCallExpression executeMethodExpr = Expression.Call(Expression.Convert(commandParam, commandField.FieldType), executeMethod, inputParam, resolverParam, argumentsParam, writerParam); net20Transform = Expression.Lambda<Net20Transform>(executeMethodExpr, commandParam, inputParam, resolverParam, argumentsParam, writerParam).Compile(); } }