public Expression GetExpressionTree() { if (this.IsMetadataCached) { if (this.expressionTree == null) { string validationError; // it's safe to create this CodeActivityMetadata here, // because we know we are using it only as lookup purpose. CodeActivityMetadata metadata = new CodeActivityMetadata(this, this.GetParentEnvironment(), false); CodeActivityPublicEnvironmentAccessor publicAccessor = CodeActivityPublicEnvironmentAccessor.CreateWithoutArgument(metadata); try { this.expressionTree = this.CompileLocationExpression(publicAccessor, out validationError); if (validationError != null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.ExpressionTamperedSinceLastCompiled(validationError))); } } finally { metadata.Dispose(); } } Fx.Assert(this.expressionTree.NodeType == ExpressionType.Lambda, "Lambda expression required"); return(ExpressionUtilities.RewriteNonCompiledExpressionTree((LambdaExpression)this.expressionTree)); } else { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.ActivityIsUncached)); } }
public Expression GetExpressionTree() { if (this.IsMetadataCached) { if (this.expressionTree == null) { // it's safe to create this CodeActivityMetadata here, // because we know we are using it only as lookup purpose. var metadata = new CodeActivityMetadata(this, this.GetParentEnvironment(), false); var publicAccessor = CodeActivityPublicEnvironmentAccessor.CreateWithoutArgument(metadata); try { this.expressionTree = VisualBasicHelper.Compile <TResult>(this.ExpressionText, publicAccessor, false); } catch (SourceExpressionException e) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.VBExpressionTamperedSinceLastCompiled(e.Message))); } finally { metadata.Dispose(); } } Fx.Assert(this.expressionTree.NodeType == ExpressionType.Lambda, "Lambda expression required"); return(ExpressionUtilities.RewriteNonCompiledExpressionTree((LambdaExpression)this.expressionTree)); } else { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.ActivityIsUncached)); } }