Ejemplo n.º 1
0
        private static CodeTypeDeclaration GenerateType(BuildTimeArgs args, DateTimeOffset buildTime)
        {
            string buildTimeString = buildTime.ToString("O", CultureInfo.InvariantCulture);
            var    parseExact      = new CodeMethodInvokeExpression(
                new CodeTypeReferenceExpression(typeof(DateTimeOffset)),
                "ParseExact",
                new CodePrimitiveExpression(buildTimeString),
                new CodePrimitiveExpression("O"),
                new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(typeof(CultureInfo)), "InvariantCulture")
                );

            var returnStatement = new CodeMethodReturnStatement(parseExact);

            var property = new CodeMemberProperty
            {
                Attributes = MemberAttributes.Final | MemberAttributes.Public | MemberAttributes.Static,
                HasGet     = true,
                HasSet     = false,
                Name       = "BuildTime",
                Type       = new CodeTypeReference(typeof(DateTimeOffset)),
            };

            property.GetStatements.Add(new CodeCommentStatement(buildTime.ToString("G")));
            property.GetStatements.Add(returnStatement);

            var type = new CodeTypeDeclaration(args.Class)
            {
                IsClass        = true,
                Attributes     = MemberAttributes.Static,
                TypeAttributes = args.Public ? TypeAttributes.Public : TypeAttributes.NotPublic
            };

            type.Members.Add(property);
            return(type);
        }
Ejemplo n.º 2
0
        public static string GenerateCode(BuildTimeArgs args, DateTimeOffset buildTime)
        {
            var unit = new CodeCompileUnit();
            var ns   = string.IsNullOrEmpty(args.Namespace) ? new CodeNamespace() : new CodeNamespace(args.Namespace);
            var type = GenerateType(args, buildTime);

            ns.Types.Add(type);
            unit.Namespaces.Add(ns);

            CodeDomProvider      provider = CodeDomProvider.CreateProvider("CSharp");
            CodeGeneratorOptions options  = new CodeGeneratorOptions
            {
                BracingStyle = "C"
            };

            using (var w = new System.IO.StringWriter())
            {
                provider.GenerateCodeFromCompileUnit(unit, w, options);
                return(w.ToString());
            }
        }
Ejemplo n.º 3
0
        private static int Main2(BuildTimeArgs args)
        {
            try
            {
                string outFile = args.OutputFile;
                if (string.IsNullOrEmpty(outFile))
                {
                    outFile = Path.Combine(Environment.CurrentDirectory, (args.Class ?? "_BuildTime") + ".cs");
                }

                string code = CodeGen.GenerateCode(args, DateTimeOffset.Now);
                File.WriteAllText(outFile, code);

                return(0);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                return(1);
            }
        }