示例#1
0
        public ResxGenWriter(string filename, string nameSpace, string resxNameSpace, bool asPublic, bool asPartial, bool asSealed, 
            string className, string baseException)
		{
            _options = new ResXOptions();
			_fileName = filename;
			_nameSpace = nameSpace;
			_resxNameSpace = resxNameSpace;
			_public = asPublic;
		    _partial = asPartial;
			_sealed = asSealed;
			_className = className;
            _baseException = baseException;
            _fullClassName = String.Format("{0}.{1}", _nameSpace, _className);
            _eventLogger = null;

			//Environment.CurrentDirectory = Path.GetDirectoryName(_fileName);
            Parse(_xstrings = new List<ResxString>(), _xexceptions = new Dictionary<string, ResxException>(StringComparer.Ordinal), _xnodes = new List<ResXDataNode>());
            _eventLogger = _eventLogger ?? _options.AutoLogMethod;
		}
        public McFileGenerator(IEnumerable <string> files)
        {
            _resxFiles = new List <string>();
            foreach (string file in files)
            {
                if (StringComparer.OrdinalIgnoreCase.Equals(Path.GetExtension(file), ".csproj"))
                {
                    _resxFiles.AddRange(ProjectToResXFiles(file));
                }
                else if (StringComparer.OrdinalIgnoreCase.Equals(Path.GetExtension(file), ".resx"))
                {
                    _resxFiles.Add(file);
                }
                else
                {
                    throw new ApplicationException(String.Format("Unknown file type: {0}", file));
                }
            }

            _itemsByHResult = new Dictionary <uint, ResxGenItem>();
            _itemsByName    = new Dictionary <string, List <ResxGenItem> >(StringComparer.OrdinalIgnoreCase);
            _facilities     = new Dictionary <int, string>();
            _categories     = new Dictionary <int, string>();
            _eventsource    = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (string filename in _resxFiles)
            {
                Dictionary <string, bool> thisFile = new Dictionary <string, bool>(StringComparer.OrdinalIgnoreCase);
                ResXOptions options = new ResXOptions();

                foreach (ResxGenItem item in options.ReadFile(filename))
                {
                    ResxGenItem collision;

                    item.Options["EventMessageFormat"] = options.EventMessageFormat;

                    if (item.Ignored || item.MessageId == 0)
                    {
                        continue;
                    }

                    if (_itemsByHResult.TryGetValue(item.MessageId, out collision))
                    {
                        throw new ApplicationException(String.Format("The item {0} has a duplicate id {2:x8} with {3} in file {1}.", item.Node.Name, filename, item.MessageId, collision.Node.Name));
                    }
                    _itemsByHResult.Add(item.MessageId, item);

                    if (!thisFile.ContainsKey(item.ItemName) && _itemsByName.ContainsKey(item.ItemName))
                    {
                        throw new ApplicationException(String.Format("Duplicate item name {0} found in file {1}.", item.ItemName, filename));
                    }

                    List <ResxGenItem> list;
                    if (!_itemsByName.TryGetValue(item.ItemName, out list))
                    {
                        thisFile.Add(item.ItemName, true);
                        _itemsByName.Add(item.ItemName, list = new List <ResxGenItem>());
                    }
                    list.Add(item);
                }

                if (options.FacilityId > 0)
                {
                    AddKeyValue("Facility", filename, _facilities, options.FacilityId, options.FacilityName);
                }
                if (options.EventCategoryId > 0)
                {
                    AddKeyValue("Category", filename, _categories, options.EventCategoryId, options.EventCategoryName);
                }
                if (!String.IsNullOrEmpty(options.EventSource))
                {
                    AddKeyValue("Event Source", filename, _eventsource, options.EventSource, options.EventLog);
                }
            }
        }