コード例 #1
0
        /// <summary>
        /// Helper method to get all references for the given compilation.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected IEnumerable <CompilerReference> GetAllReferences(TypeContext context)
        {
#pragma warning disable 0618 // Backwards Compat.
            var references =
                ReferenceResolver.GetReferences(
                    context,
                    IncludeAssemblies()
                    .Select(CompilerReference.From)
                    .Concat(IncludeReferences()))
#pragma warning restore 0618 // Backwards Compat.
                .ToList();
            context.AddReferences(references);
            return(references);
        }
コード例 #2
0
        /// <summary>
        /// Helper method to get all references for the given compilation.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected IEnumerable <CompilerReference> GetAllReferences(TypeContext context)
        {
            var references =
                ReferenceResolver.GetReferences(
                    context,
                    IncludeAssemblies()
                    .Select(RazorEngine.Compilation.ReferenceResolver.CompilerReference.From)
                    .Concat(IncludeReferences()));

            foreach (var reference in references)
            {
                this.references.Add(reference);
                yield return(reference);
            }
        }
コード例 #3
0
        /// <summary>
        /// Helper method to get all references for the given compilation.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected IEnumerable <CompilerReference> GetAllReferences(TypeContext context)
        {
#pragma warning disable 0618 // Backwards Compat.
            var references =
                ReferenceResolver.GetReferences(
                    context,
                    IncludeAssemblies()
                    .Select(RazorEngine.Compilation.ReferenceResolver.CompilerReference.From)
                    .Concat(IncludeReferences()));
#pragma warning restore 0618 // Backwards Compat.
            foreach (var reference in references)
            {
                this.references.Add(reference);
                yield return(reference);
            }
        }
コード例 #4
0
        private Tuple <CompilerResults, string> Compile(TypeContext context)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(GetType().Name);
            }

            var compileUnit = GetCodeCompileUnit(context.ClassName, context.TemplateContent, context.Namespaces,
                                                 context.TemplateType, context.ModelType);

            var @params = new CompilerParameters
            {
                GenerateInMemory        = true,
                GenerateExecutable      = false,
                IncludeDebugInformation = Debug,
                TreatWarningsAsErrors   = false,
                CompilerOptions         = "/target:library /optimize /define:RAZORENGINE"
            };

            var assemblies = ReferenceResolver.GetReferences(context, IncludeAssemblies());

            assemblies = assemblies
                         .Where(a => !string.IsNullOrWhiteSpace(a))
                         .Distinct(StringComparer.InvariantCultureIgnoreCase);

            @params.ReferencedAssemblies.AddRange(assemblies.ToArray());

            string sourceCode = null;

            if (Debug)
            {
                var builder = new StringBuilder();
                using (var writer = new StringWriter(builder, CultureInfo.InvariantCulture))
                {
                    _codeDomProvider.GenerateCodeFromCompileUnit(compileUnit, writer, new CodeGeneratorOptions());
                    sourceCode = builder.ToString();
                }
            }

            return(Tuple.Create(_codeDomProvider.CompileAssemblyFromDom(@params, compileUnit), sourceCode));
        }