Я хочу создать инструмент, который управляет файлами проекта C#

(В основном мы хотим импортировать целевые файлы в некоторых местах в *.csproj файле и иначе проверить, что файл следует нашим стандартам),

Каков лучший способ сделать это? Я планирую использовать C# и XDocument (LINQ к XML) и управлял узлами. Но это - лучший способ? Другие альтернативы могут быть:

  1. Найдите XSD для csproj/msbuild и создайте stronly типизированные объекты, которые представляют файл проекта. действительно ли это возможно?
  2. Есть ли другие инструменты/языки, которые лучше (Это могло использовать это в качестве оправдания изучить Ruby). Ответ должен был бы иметь некоторые ссылки на примеры для управления XML.

Возможно, реальный вопрос: Что лучший способ состоит в том, чтобы считать и управлять XML программно?

7
задан Arve 5 February 2010 в 08:18
поделиться

4 ответа

Я бы лично использовал LINQ to XML напрямую ... если вы не занимаетесь действительно тяжелой обработкой, я не думаю, что для этого стоит создавать объектную модель. Сколько правил / чего еще нужно для этого инструмента?

5
ответ дан 6 December 2019 в 14:04
поделиться

MSBuild (формат файлов проекта) имеет объектную модель , которую можно использовать для таких приложений.

5
ответ дан 6 December 2019 в 14:04
поделиться

Что касается второй части нашего вопроса о том, как программно управлять XML, вот некоторые xml из файла конфигурации проекта. (web.config)

 <system.web>
<compilation debug="false">
<assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, 
</compilation>
</compilation>

и для синтаксического анализа с использованием LINQ-TO-XML , примерно следующее

XDocument assemblies = XDocument.Parse("web.config");

var projectAssemblies= from a in assemblies.Descendants("system.web\assemblies")
               select new  // What ever object you waant
               {
                   Assembly = a.Attribute("assembly").Value.ToString(),
                   Version = a.Attribute("Version").Value.ToString(),
                   Culture = a.Element("Culture").Value.ToString(),
                   PublicKeyToken = a.Attribute("PublicKeyToken").Value.ToString()
               };

foreach (var v in projectAssemblies)
{
    // enjoy them 
}

, надеюсь, это поможет

2
ответ дан 6 December 2019 в 14:04
поделиться

У нас есть собственный инструмент, который оперативно манипулирует файлами проекта для обновления ссылок и установки различных свойств. Поскольку файлы проекта не так уж сложны, мы просто напрямую манипулируем XML. Инструмент был написан задолго до того, как стал доступен LINQ, поэтому он его не использует, но я не вижу причин, по которым вы не могли сделать то, что предлагает Джон.

Когда мы обновили VS2005 до VS2008, нам нужно было внести лишь незначительные изменения в код, но, конечно, нет никаких гарантий в этом отношении. Возможно, нам придется внести более серьезные изменения в будущие версии.

Если вам интересно, в моем ответе на этот вопрос есть немного дополнительной информации о нашем инструменте. Следует ли использовать .sln для управления версиями?

3
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: