Формат для включения данных в код C # - PullRequest
3 голосов
/ 20 мая 2011

У меня есть программа, которая использует таблицы жестко закодированных значений. Например.

    public static readonly IDictionary<SpecBuild, BuildInfo> Builds = new Dictionary<SpecBuild, BuildInfo> {
            { SpecBuild.WarriorArms,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Arms",
                            Role = Role.Melee
                    }
                    },
            { SpecBuild.WarriorFury,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Fury",
                            Role = Role.Melee
                    }
                    },
            { SpecBuild.WarriorProtection,
                    new BuildInfo {
                            Class = Class.Warrior,
                            Name = "Protection",
                            Role = Role.Tank
                    }
                    }, ...

Эти данные редко меняются, поэтому я хорошо их программирую. Проблема в том, что эти данные трудно прочитать, а форматирование не работает, потому что Resharper переформатирует их по-другому.

В идеале я хотел бы получить файл специального формата с настраиваемым средством просмотра VS2010, который бы представлял эту информацию в виде таблицы и либо генерировал код C # для этой таблицы как часть процесса компиляции, либо, возможно, даже компилировал бы ее непосредственно в MSIL (CLR). .

Я ищу решение «под ключ», проблема не настолько серьезна, чтобы требовать какой-либо дополнительной разработки.

Ответы [ 4 ]

2 голосов
/ 20 мая 2011

Я бы (и много раз) помещал данные этого типа в файл (возможно, через resx).Затем загрузите данные с помощью десериализатора.Если это должно быть легко отредактировано, возможно JSON через JavaScriptSerializer или JSON.NET.Если говорят о данных, а производительность - это ключ, может быть, что-то более жесткое (может быть, двоичное).XML, конечно, тоже приемлемый выбор.

Другие варианты могут включать встроенную базу данных, если этого требует сценарий.

0 голосов
/ 18 июня 2011

Resharper позволяет мне исключать файлы по расширению, поэтому я называю свои файлы * .data.cs, ​​форматирую данные так, как хочу, и resharper не переформатирует их.

0 голосов
/ 20 мая 2011

Вы можете создать текстовый шаблон времени разработки T4 с

void SpecBuild(string spec, string @class, string name, string role)
{
    Write(string.Format("{{ SpecBuild.{0}, " +
                        "new BuildInfo {{ " +
                        "Class = Class.{1}, " +
                        "Name = @\"{2}\", " +
                        "Role = Role.{3} " +
                        "}} " +
                        "}},",
                        spec,
                        @class,
                        name.Replace("\"", "\"\""),
                        role));
}

и

//        SpecBuild            Class      Name          Role
//        -------------------- ---------- ------------- -------
SpecBuild("WarriorArms",       "Warrior", "Arms",       "Melee");
SpecBuild("WarriorFury",       "Warrior", "Fury",       "Melee");
SpecBuild("WarriorProtection", "Warrior", "Protection", "Melee");
//        -------------------- ---------- ------------- -------
0 голосов
/ 20 мая 2011

В идеале я хотел бы получить файл специального формата с пользовательским средством просмотра VS2010

Это вполне возможно:

  • Создать DSL
  • Напишите расширение VS2010, которое поддерживает DSL
  • Напишите инструмент для выполнения сборки (задача MSBuild)
  • Напишите установщик для обновления установок VS с помощью инструментария.

Конечно, для понимания того, как это сделать, нужно много узнать.

Если у вас много приложений с множеством разработчиков, использующих один и тот же тип информации, это имело бы смысл.В противном случае есть другие варианты:

  1. Настроить Resharper, чтобы не переформатировать его (я предполагаю, что это возможно).
  2. Использовать формат данных (текст, XML, JSON ...), которыйVS уже можно редактировать.Добавьте в качестве ресурса во время сборки и создайте инструмент для создания графа объектов при запуске приложения (или по требованию).

Очевидно, # 1 (из возможных) является самым простым, но хрупким.№ 2 хорошо зарекомендовал себя - так обрабатываются ресурсы (и XAML может быть).

...