Create() 공개 정적인 메소드

public static Create ( string language, string targetNamespace, string resourcesTypeName, string targetClassName, bool makePublic, ResourceArea rootArea ) : IGenerator
language string
targetNamespace string
resourcesTypeName string
targetClassName string
makePublic bool
rootArea ResourceArea
리턴 IGenerator
예제 #1
0
        /// <summary>
        /// Generates the strong typed resources for the given resx input files.
        /// </summary>
        /// <remarks>a remark</remarks>
        public static string Execute(string language, ITaskItem resx, string rootNamespace, TaskLoggingHelper log)
        {
            var resxFile = resx.GetMetadata("FullPath");
            // Same logic as ResXFileCodeGenerator.
            var resourcesTypeName = Path.GetFileNameWithoutExtension(resxFile);
            var targetNamespace   = resx.GetMetadata("CustomToolNamespace");
            var relativeDir       = resx.GetMetadata("CanonicalRelativeDir");
            var makePublic        = false;

            bool.TryParse(resx.GetMetadata("Public"), out makePublic);

            if (string.IsNullOrEmpty(targetNamespace))
            {
                // Note that the custom tool namespace in newer versions of VS is saved
                // as item metadata. On older versions, it would have to be manually
                // set.
                targetNamespace = rootNamespace + "." + relativeDir
                                  .TrimEnd(Path.DirectorySeparatorChar)
                                  .Replace(Path.DirectorySeparatorChar, '.');

                log.LogMessage(MessageImportance.Low, "No CustomToolNamespace metadata found, determined TargetNamespace=" + targetNamespace);
            }
            else
            {
                log.LogMessage(MessageImportance.Low, "Using provided CustomToolNamespace={0} metadata as TargetNamespace for {1}", targetNamespace, resx.ItemSpec);
            }

            var targetClassName = resx.GetMetadata("TargetClassName");

            if (string.IsNullOrEmpty(targetClassName))
            {
                targetClassName = DefaultClassName;
            }

            var rootArea  = ResourceFile.Build(resxFile, targetClassName);
            var generator = Generator.Create(language, targetNamespace, resourcesTypeName, targetClassName, makePublic, rootArea);

            return(generator.TransformText());
        }
예제 #2
0
        /// <summary>
        /// Generates the strong typed resources for the given resx input files.
        /// </summary>
        /// <remarks>a remark</remarks>
        public override bool Execute()
        {
            var generatedFiles = new List <ITaskItem> (ResxFiles.Length);

            foreach (var resx in ResxFiles)
            {
                var resxFile = resx.GetMetadata("FullPath");
                // Same logic as ResXFileCodeGenerator.
                var resourcesTypeName = Path.GetFileNameWithoutExtension(resxFile);
                var targetNamespace   = resx.GetMetadata("CustomToolNamespace");
                var relativeDir       = resx.GetMetadata("CanonicalRelativeDir");

                if (string.IsNullOrEmpty(targetNamespace))
                {
                    // Note that the custom tool namespace in newer versions of VS is saved
                    // as item metadata. On older versions, it would have to be manually
                    // set.
                    targetNamespace = RootNamespace + "." + relativeDir
                                      .TrimEnd(Path.DirectorySeparatorChar)
                                      .Replace(Path.DirectorySeparatorChar, '.');

                    Log.LogMessage(MessageImportance.Low, "No CustomToolNamespace metadata found, determined TargetNamespace=" + targetNamespace);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Using provided CustomToolNamespace={0} metadata as TargetNamespace for {1}", targetNamespace, resx.ItemSpec);
                }

                var targetClassName = resx.GetMetadata("TargetClassName");
                if (string.IsNullOrEmpty(targetClassName))
                {
                    targetClassName = DefaultClassName;
                    Log.LogMessage(MessageImportance.Low, "No TargetClassName metadata found, using default class name " + DefaultClassName);
                }
                else
                {
                    Log.LogMessage(MessageImportance.Low, "Using provided TargetClassName={0} metadata for {1}", targetClassName);
                }

                var rootArea  = ResourceFile.Build(resxFile, targetClassName);
                var generator = Generator.Create(Language, targetNamespace, resourcesTypeName, targetClassName, bool.Parse(resx.GetMetadata("Public")), rootArea);

                var output     = generator.TransformText();
                var targetFile = Path.Combine(OutputPath, relativeDir, resx.GetMetadata("Filename") + "." + targetClassName + FileExtension);

                if (!Directory.Exists(Path.GetDirectoryName(targetFile)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(targetFile));
                }

                File.WriteAllText(targetFile, output);
                generatedFiles.Add(new TaskItem(resx)
                {
                    ItemSpec = targetFile
                });
            }

            GeneratedFiles = generatedFiles.ToArray();

            return(true);
        }