Я хочу создать инструмент, который манипулирует файлами проекта C # - PullRequest
7 голосов
/ 05 февраля 2010

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

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

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

Может быть, реальный вопрос в том, как лучше всего читать и манипулировать XML программно?

Ответы [ 4 ]

5 голосов
/ 05 февраля 2010

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

5 голосов
/ 05 февраля 2010

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

3 голосов
/ 05 февраля 2010

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

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

Если вам интересно, в нашем ответе на этот вопрос есть немного больше информации о нашем инструменте Должен ли .sln быть привержен к контролю исходного кода?

2 голосов
/ 05 февраля 2010

Что касается второй части нашего вопроса о том, как программно манипулировать 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 
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...